MmMapLockedPagesWithReservedMapping-Funktion (wdm.h)
Die MmMapLockedPagesWithReservedMapping Routine ordnet alle oder einen Teil eines Adressbereichs zu, der zuvor von der MmAllocateMappingAddress Routine reserviert wurde.
Syntax
PVOID MmMapLockedPagesWithReservedMapping(
[in] PVOID MappingAddress,
[in] ULONG PoolTag,
[in] PMDL MemoryDescriptorList,
[in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);
Parameter
[in] MappingAddress
Zeigen Sie auf den Anfang des reservierten virtuellen Speicherbereichs. Dies muss eine Adresse sein, die zuvor von MmAllocateMappingAddresszurückgegeben wurde.
[in] PoolTag
Gibt das Pooltag für den reservierten Speicherpuffer an. Dies muss mit dem wert identisch sein, der im PoolTag Parameter des Aufrufs von MmAllocateMappingAddress angegeben ist, die den Puffer reserviert haben.
[in] MemoryDescriptorList
Ein Zeiger auf die MDL, die zugeordnet werden soll. Diese MDL muss physische Seiten beschreiben, die gesperrt sind. Eine gesperrte MDL kann von der MmProbeAndLockPages oder MmAllocatePagesForMdlEx Routine erstellt werden.
[in] CacheType
Gibt den MEMORY_CACHING_TYPE Wert an, der zum Erstellen der Zuordnung verwendet werden soll.
Rückgabewert
MmMapLockedPagesWithReservedMapping gibt einen Zeiger an den Anfang des zugeordneten Speichers zurück oder NULL-, wenn das System den Speicher nicht zuordnen konnte. Diese Routine gibt NULL- nur zurück, wenn in den Funktionsparametern ein Fehler auftritt (z. B. ist die Zuordnungsadresse des Treibers nicht groß genug, um die bereitgestellte MDL zu umfassen). Diese Funktion soll Treibern ermöglichen, auch in Szenarien mit niedriger Ressource Fortschritte zu erzielen.
Bemerkungen
Der Aufrufer kann MmMapLockedPagesWithReservedMapping verwenden, um eine Unterrange des virtuellen Speicherbereichs zuzuordnen, der durch MmAllocateMappingAddress wie folgt reserviert ist:
Verwenden Sie IoAllocateMdl-, um eine MDL zuzuweisen. Die zurückgegebene MDL wird mithilfe der angegebenen Startadresse und der Größe des Unterbereichs des virtuellen Speicherbereichs erstellt, der zugeordnet werden soll.
Verwenden Sie MmProbeAndLockPages-, um die physischen Seiten zu sperren, die von der in Schritt 1 abgerufenen MDL beschrieben werden.
Verwenden Sie MmMapLockedPagesWithReservedMapping, um den virtuellen Speicher tatsächlich dem physischen Speicher zuzuordnen, der in Schritt 2 gesperrt wurde. Beachten Sie, dass die von dieser Funktion zurückgegebene virtuelle Adresse den Byte-Offset enthält, den die MDL angibt. Das MappedSystemVa- Feld der von dieser Funktion festgelegten MDL enthält jedoch nicht den Byteoffset.
Sobald der Aufrufer nicht auf den Speicher zugreifen muss, wird der Speicher mit MmUnmapReservedMappingentfernt. Der Aufrufer kann den Speicherpuffer nach Bedarf zuordnen und aufheben und muss die Zuordnung aufheben, bevor der Zuordnungsbereich mit MmFreeMappingAddressfreigegeben wird.
Beachten Sie, dass der parameter MappingAddress den Anfang des Speicherbereichs angibt, der zuvor vom Aufrufer reserviert wurde, nicht der Anfang des Speicherunterbereichs, der zugeordnet werden soll. Der Aufrufer gibt die Startadresse und die Länge des Puffers an, wenn die MDL mit IoAllocateMdlzugeordnet wird. Der Puffer muss in den reservierten Speicherbereich passen, kann jedoch eine strenge Teilmenge sein.
Die Routine verwendet den CacheType Parameter nur, wenn die von der MDL beschriebenen Seiten noch keinen Cachetyp zugeordnet haben. In fast allen Fällen verfügen die Seiten jedoch bereits über einen zugeordneten Cachetyp, und dieser Cachetyp wird von der neuen Zuordnung verwendet. Eine Ausnahme dieser Regel ist für Seiten, die von MmAllocatePagesForMdlzugeordnet werden, die keinem bestimmten Cachetyp zugeordnet sind. Für solche Seiten bestimmt der CacheType Parameter den Cachetyp der Zuordnung.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar in Windows XP und höheren Versionen von Windows. |
Zielplattform- | Universal |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= DISPATCH_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport) |