Partager via


Allocation de ressources de mémoire partagée

Pour allouer des ressources de mémoire partagée pour une file d’attente de machine virtuelle, un pilote miniport appelle la fonction NdisAllocateSharedMemory . Par exemple, le pilote miniport alloue de la mémoire partagée lorsqu’il reçoit l’OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE . En outre, un pilote miniport peut allouer de la mémoire partagée pour la file d’attente par défaut lors de l’initialisation de la carte réseau. Pour plus d’informations sur l’allocation de files d’attente, consultez Allocation d’une file d’attente de machine virtuelle.

Le pilote miniport peut allouer plus de mémoire pour la file d’attente jusqu’à ce que la file d’attente soit libérée. Pour plus d’informations sur la libération d’une file d’attente, consultez Libérer une file d’attente de machine virtuelle.

La structure NDIS_SHARED_MEMORY_PARAMETERS spécifie les paramètres de mémoire partagée pour une demande d’allocation de mémoire partagée. Les pilotes miniport transmettent cette structure à la fonction NdisAllocateSharedMemory . NDIS transmet cette structure à la fonction NetAllocateSharedMemory (autrement dit, le point d’entrée ALLOCATE_SHARED_MEMORY_HANDLER).

Lorsqu’un pilote miniport alloue de la mémoire partagée, il spécifie les éléments suivants :

  • Identificateur de file d’attente.

  • Longueur de la mémoire partagée.

  • Comment la mémoire partagée est utilisée. Par exemple, le pilote miniport spécifie NdisSharedMemoryUsageReceive si la mémoire partagée doit être utilisée pour les mémoires tampons de réception.

Si l’indicateur NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS n’est pas défini dans le membre Indicateurs , la mémoire partagée peut être spécifiée dans une liste de regroupement de points contenue dans la mémoire non contiguë.

L’énumération NDIS_SHARED_MEMORY_USAGE spécifie la façon dont la mémoire partagée est utilisée. L’énumération NDIS_SHARED_MEMORY_USAGE est utilisée dans les structures NDIS_SHARED_MEMORY_PARAMETERS et NDIS_SCATTER_GATHER_LIST_PARAMETERS . Pour plus d’informations sur les paramètres de mémoire partagée dans les mémoires tampons de réception de VMQ, consultez Mémoire partagée dans les mémoires tampons de réception.

La fonction NdisAllocateSharedMemory fournit les éléments suivants à l’appelant :

  • Adresse virtuelle de la mémoire allouée.

  • Liste de nuages de points.

  • Handle de mémoire partagée : pour les indications de réception.

  • Handle d’allocation : utilisé pour identifier la mémoire ultérieurement.

Les pilotes miniport appellent la fonction NdisFreeSharedMemory pour libérer de la mémoire partagée pour une file d’attente. Si le pilote miniport a alloué la mémoire partagée pour une file d’attente non par défaut, il libère la mémoire partagée dans le contexte de l’OID OID_RECEIVE_FILTER_FREE_QUEUE pendant qu’il libère la file d’attente. Les pilotes Miniport libèrent la mémoire partagée qu’ils ont allouée pour la file d’attente par défaut dans le contexte de la fonction MiniportHaltEx .