Fonction MmMapLockedPagesWithReservedMapping (wdm.h)

La routine MmMapLockedPagesWithReservedMapping mappe tout ou partie d’une plage d’adresses précédemment réservée par la routine MmAllocateMappingAddress .

Syntaxe

PVOID MmMapLockedPagesWithReservedMapping(
  [in] PVOID                                                    MappingAddress,
  [in] ULONG                                                    PoolTag,
  [in] PMDL                                                     MemoryDescriptorList,
  [in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);

Paramètres

[in] MappingAddress

Pointeur vers le début de la plage de mémoire virtuelle réservée. Il doit s’agir d’une adresse précédemment retournée par MmAllocateMappingAddress.

[in] PoolTag

Spécifie la balise de pool pour la mémoire tampon réservée. Cette valeur doit être identique à la valeur spécifiée dans le paramètre PoolTag de l’appel à MmAllocateMappingAddress qui a réservé la mémoire tampon.

[in] MemoryDescriptorList

Pointeur vers le MDL à mapper. Cette MDL doit décrire les pages physiques verrouillées. Une mdL verrouillée peut être créée par la routine MmProbeAndLockPages ou MmAllocatePagesForMdlEx .

[in] CacheType

Spécifie la valeur MEMORY_CACHING_TYPE à utiliser pour créer le mappage.

Valeur retournée

MmMapLockedPagesWithReservedMapping retourne un pointeur vers le début de la mémoire mappée ou NULL si le système n’a pas pu mapper la mémoire. Cette routine retourne la valeur NULL uniquement en cas d’erreur dans les paramètres de fonction (par exemple, l’adresse de mappage du pilote n’est pas assez grande pour couvrir le MDL fourni). Cette fonction est destinée à permettre aux pilotes d’effectuer des progrès, même dans des scénarios à faible ressource.

Remarques

L’appelant peut utiliser MmMapLockedPagesWithReservedMapping pour mapper une sous-plage de mémoire virtuelle réservée par MmAllocateMappingAddress comme suit :

  • Utilisez IoAllocateMdl pour allouer un MDL. Le MDL retourné est généré à l’aide de l’adresse de départ spécifiée et de la taille de la sous-plage de mémoire virtuelle à mapper.

  • Utilisez MmProbeAndLockPages pour verrouiller les pages physiques décrites par le MDL obtenu à l’étape 1.

  • Utilisez MmMapLockedPagesWithReservedMapping pour mapper la mémoire virtuelle à la mémoire physique verrouillée à l’étape 2. Notez que l’adresse virtuelle retournée par cette fonction inclut le décalage d’octet spécifié par le MDL. Toutefois, le champ MappéSystemVa de la MDL définie par cette fonction n’inclut pas le décalage d’octet.

  • Une fois que l’appelant n’a pas besoin d’accéder à la mémoire, il annule le mappage de la mémoire avec MmUnmapReservedMapping. L’appelant peut mapper et annuler le mappage de la mémoire tampon en fonction des besoins, et doit l’annuler avant de libérer la plage de mappage avec MmFreeMappingAddress.

Notez que le paramètre MappingAddress spécifie le début de la plage de mémoire précédemment réservée par l’appelant, et non le début de la sous-plage de mémoire à mapper. L’appelant spécifie l’adresse de départ et la longueur de la mémoire tampon lorsqu’il alloue le MDL avec IoAllocateMdl. La mémoire tampon doit tenir dans la plage de mémoire réservée, mais il peut s’agir d’un sous-ensemble strict.

La routine utilise le paramètre CacheType uniquement si les pages décrites par le MDL n’ont pas déjà de type de cache associé. Toutefois, dans presque tous les cas, les pages ont déjà un type de cache associé, et ce type de cache est utilisé par le nouveau mappage. Une exception à cette règle concerne les pages allouées par MmAllocatePagesForMdl, qui n’ont pas de type de cache spécifique associé. Pour ces pages, le paramètre CacheType détermine le type de cache du mappage.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows XP et les versions ultérieures de Windows.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport)

Voir aussi

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping