PALLOCATE_COMMON_BUFFER_WITH_BOUNDS fonction de rappel (wdm.h)

Cette fonction de rappel alloue la mémoire pour une mémoire tampon commune et la mappe afin qu’elle soit accessible par un appareil master et le processeur. La mémoire tampon commune peut être liée par une adresse logique minimale et maximale facultative.

Syntaxe

PALLOCATE_COMMON_BUFFER_WITH_BOUNDS PallocateCommonBufferWithBounds;

PVOID PallocateCommonBufferWithBounds(
  [in]           PDMA_ADAPTER DmaAdapter,
  [in, optional] PPHYSICAL_ADDRESS MinimumAddress,
  [in, optional] PPHYSICAL_ADDRESS MaximumAddress,
  [in]           ULONG Length,
  [in]           ULONG Flags,
  [in, optional] MEMORY_CACHING_TYPE *CacheType,
  [in]           NODE_REQUIREMENT PreferredNode,
  [out]          PPHYSICAL_ADDRESS LogicalAddress
)
{...}

Paramètres

[in] DmaAdapter

Pointeur vers une structure DMA_ADAPTER. Cette structure est l’objet d’adaptateur qui représente le périphérique DMA master bus ou le canal DMA système du pilote. L’appelant a obtenu ce pointeur à partir d’un appel précédent à la routine IoGetDmaAdapter .

[in, optional] MinimumAddress

Pointeur vers une variable qui contient l’adresse logique minimale pour la mémoire tampon commune. Ce paramètre indique que la mémoire tampon doit être allouée à partir de la mémoire au niveau et au-dessus de cette adresse. Ce paramètre est facultatif et peut être spécifié comme NULL pour indiquer qu’il n’y a pas d’adresse minimale.

[in, optional] MaximumAddress

Pointeur vers une variable qui contient l’adresse logique maximale pour la mémoire tampon commune. Ce paramètre indique que la mémoire tampon doit être allouée à partir de la mémoire située sous cette adresse. Ce paramètre est facultatif et peut être spécifié comme NULL pour indiquer qu’il n’y a pas d’adresse maximale.

[in] Length

Taille, en octets, de la mémoire tampon commune à allouer pour l’opération DMA.

[in] Flags

Taille, en octets, de la mémoire tampon commune à allouer pour l’opération DMA.

Indicateur Signification
DOMAIN_COMMON_BUFFER_LARGE_PAGE La mémoire tampon commune sera allouée à l’aide d’une granularité de page plus grande de PAGE_SIZE * 512. Notez que cela peut augmenter le risque d’échec de l’allocation.

[in, optional] CacheType

Pointeur vers une énumération MEMORY_CACHING_TYPE indiquant si la routine doit activer ou désactiver la mémoire mise en cache dans la mémoire tampon commune à allouer. Seules les valeurs de MmNonCached et MmCached sont prises en charge. Le paramètre est facultatif et peut être spécifié comme NULL pour spécifier que la mise en cache dépend de la plateforme matérielle par défaut.

[in] PreferredNode

Nœud NUMA préféré à partir duquel la mémoire doit être allouée. Si N est le nombre de nœuds NUMA dans un système multiprocesseur, PreferredNode est un nombre compris entre 0 et N–1. Pour un système monoprocesseur ou un système multiprocesseur non NUMA, définissez PreferredNode sur zéro.

[out] LogicalAddress

Pointeur vers une variable dans laquelle cette routine écrit l’adresse logique que l’appareil peut utiliser pour accéder à la mémoire tampon commune. L’appareil DMA doit utiliser cette adresse logique au lieu de l’adresse physique retournée par une routine telle que MmGetPhysicalAddress.

Valeur retournée

Retourne pvOID qui est l’adresse virtuelle de la mémoire allouée pour la mémoire tampon commune. Si la mémoire tampon ne peut pas être allouée, retourne null.

Remarques

Cette fonction de rappel est une version étendue de la routine PALLOCATE_COMMON_BUFFER_EX . La liste suivante récapitule les fonctionnalités disponibles uniquement dans la version étendue :

  • L’appelant peut spécifier une adresse logique minimale pour la mémoire tampon commune à allouer.

  • L’appelant peut fournir un remplacement de type de mise en cache qui sera suivi quelle que soit la plateforme matérielle.

  • L’appelant peut spécifier l’utilisation d’une granularité plus grande pour son allocation de mémoire tampon commune.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10 version 1803
Plateforme cible Desktop (Expérience utilisateur)
En-tête wdm.h (inclure Wdm.h)
IRQL PASSIVE_LEVEL

Voir aussi

DMA_OPERATIONS

PALLOCATE_COMMON_BUFFER_EX