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 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. |
|
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
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) |