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 pendant 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 à 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 passent 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.

  • Utilisation de la mémoire partagé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 collecte de points contenue dans une 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 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 allouée pour la file d’attente par défaut dans le contexte de la fonction MiniportHaltEx.