Partager via


NdisMAllocateSharedMemoryAsyncEx, fonction (ndis.h)

Prudence

Pour les processeurs ARM et ARM64, nous recommandons vivement aux enregistreurs de pilotes NDIS d’utiliser WDF DMA ou WDM DMA au lieu de NDIS Scatter/Collect DMA.

Pour plus d’informations sur WDF DMA, consultez gestion des opérations DMA dans les pilotes KMDF.

Pour plus d’informations sur WDM DMA, consultez les rubriques enfants relatives à DMA de Gestion des entrées/sorties pour les pilotes.

Les pilotes miniport appellent la fonction NdisMAllocateSharedMemoryAsyncEx pour allouer une mémoire supplémentaire partagée entre le pilote et sa carte réseau DMA principale de bus, généralement lorsque le pilote miniport est en cours d’exécution faible sur les mémoires tampons de réception de la carte réseau disponible.

Syntaxe

NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
  [in] NDIS_HANDLE MiniportDmaHandle,
  [in] ULONG       Length,
  [in] BOOLEAN     Cached,
  [in] PVOID       Context
);

Paramètres

[in] MiniportDmaHandle

Handle vers une zone de contexte utilisée par NDIS pour gérer une ressource DMA. L’appelant a obtenu ce handle en appelant le fonction NdisMRegisterScatterGatherDma.

[in] Length

Nombre d’octets à allouer.

[in] Cached

Ce paramètre est ignoré (la mémoire mise en cache est toujours utilisée sur les systèmes x86 et x64).

[in] Context

Pointeur vers le contexte déterminé par le pilote à passer à la fonction MiniportSharedMemoryAllocateComplete lorsqu’elle est appelée.

Valeur de retour

NdisMAllocateSharedMemoryAsyncEx pouvez retourner l’une des options suivantes :

Retourner le code Description
NDIS_STATUS_PENDING
NDIS appelle la fonction MiniportSharedMemoryAllocateComplete et fournit des informations qui décrivent la mémoire partagée allouée. Si la tentative d’allocation de mémoire partagée échoue, NDIS appelle MiniportSharedMemoryAllocateComplete et passe pointeurs de NULL.
NDIS_STATUS_FAILURE
La mémoire demandée n’a pas pu être allouée pour l’instant. Si NdisMAllocateSharedMemoryAsyncEx retourne cet état, un appel suivant avec les mêmes paramètres peut réussir, selon que les ressources système sont disponibles.

Remarques

Remarque Un pilote miniport doit déjà avoir appelé NdisMRegisterScatterGatherDma ou NdisMRegisterDmaChannel pour initialiser un canal DMA nuage de points/collecter avant d’appeler NdisMAllocateSharedMemoryAsyncEx.
 
Les pilotes des cartes réseau DMA maître de bus appellent NdisMAllocateSharedMemoryAsyncEx pour allouer dynamiquement la mémoire partagée. Ces pilotes allouent également de l’espace mémoire partagé pendant l’initialisation. Ces pilotes utilisent la mémoire partagée allouée dynamiquement pour les opérations de transfert lorsque le trafic réseau élevé place des demandes excessives sur l’espace mémoire partagé existant.

Ce pilote miniport gère généralement une ou plusieurs variables d’état pour suivre le nombre de mémoires tampons partagées disponibles pour les transferts entrants. Lorsque le nombre de mémoires tampons disponibles atteint un niveau faible déterminé par le pilote, le pilote miniport appelle NdisMAllocateSharedMemoryAsyncEx pour allouer davantage d’espace tampon dans la mémoire partagée. Lorsque le nombre de mémoires tampons disponibles monte à un niveau élevé déterminé par le pilote, le pilote miniport appelle NdisMFreeSharedMemory une ou plusieurs fois pour libérer ses allocations dynamiques précédentes.

En règle générale, un tel pilote miniport conserve le bloc de mémoire partagée que sa fonction MiniportInitializeEx allouée avec NdisMAllocateSharedMemory jusqu’à ce qu’une carte réseau soit supprimée. Lorsque la carte réseau est supprimée, NDIS appelle la fonction miniport driver’s MiniportHaltEx. Cette allocation est suffisante pour gérer une demande moyenne de transferts via la carte réseau.

Un pilote miniport doit définir une limite sur la quantité de mémoire partagée qu’il peut allouer. Cette limite est spécifique au pilote et doit être suffisamment élevée pour que le pilote ne manque pas de mémoires tampons. Ne pas et une limite excessivement élevée, car cela peut entraîner une consommation gaspilleuse de la mémoire partagée qui pourrait réduire les performances du système.

Tout pilote miniport qui appelle NdisMAllocateSharedMemoryAsyncEx ou NdisMAllocateSharedMemory doit libérer toutes les allocations en attente avec un ou plusieurs appels à NdisMFreeSharedMemory lorsque sa carte réseau est supprimée.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge dans NDIS 6.0 et versions ultérieures.
plateforme cible Universel
d’en-tête ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL
règles de conformité DDI Irql_Gather_DMA_Function(ndis)

Voir aussi

MiniportHaltEx

MiniportInitializeEx

MiniportSharedMemoryAllocateComplete

NdisMAllocateSharedMemory

NdisMFreeSharedMemory

NdisMRegisterDmaChannel

NdisMRegisterScatterGatherDma