Freigeben über


MmMapLockedPagesWithReservedMapping-Funktion (wdm.h)

Die MmMapLockedPagesWithReservedMapping-Routine ordnet einen Adressbereich, der zuvor von der MmAllocateMappingAddress-Routine reserviert wurde, ganz oder teilweise zu.

Syntax

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

Parameter

[in] MappingAddress

Zeiger auf den Anfang des reservierten virtuellen Speicherbereichs. Dies muss eine Adresse sein, die zuvor von MmAllocateMappingAddress zurückgegeben wurde.

[in] PoolTag

Gibt das Pooltag für den reservierten Speicherpuffer an. Dieser muss mit dem Wert identisch sein, der im PoolTag-Parameter des Aufrufs von MmAllocateMappingAddress angegeben wurde, der den Puffer reserviert hat.

[in] MemoryDescriptorList

Ein Zeiger auf die MDL, die zugeordnet werden soll. Diese MDL muss physische Seiten beschreiben, die gesperrt sind. Eine gesperrte MDL kann mit der Routine MmProbeAndLockPages oder MmAllocatePagesForMdlEx 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 auf den Anfang des zugeordneten Arbeitsspeichers oder NULL zurück, wenn das System den Arbeitsspeicher nicht zuordnen konnte. Diese Routine gibt null nur zurück, wenn ein Fehler in den Funktionsparametern vorliegt (z. B. ist die Zuordnungsadresse des Treibers nicht groß genug, um die angegebene MDL zu umfassen). Diese Funktion soll Es Treibern ermöglichen, auch in Szenarien mit geringen Ressourcen Fortschritte zu erzielen.

Hinweise

Der Aufrufer kann MmMapLockedPagesWithReservedMapping verwenden, um einen Unterbereich des durch MmAllocateMappingAddress reservierten virtuellen Speicherbereichs wie folgt zuzuordnen:

  • Verwenden Sie IoAllocateMdl , um eine MDL zuzuweisen. Die zurückgegebene MDL wird unter Verwendung der angegebenen Startadresse und größe des zuzuordnenden Unterbereichs des virtuellen Speicherbereichs erstellt.

  • 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 Arbeitsspeicher tatsächlich dem physischen Arbeitsspeicher zuzuordnen, der in Schritt 2 gesperrt wurde. Beachten Sie, dass die von dieser Funktion zurückgegebene virtuelle Adresse den byteoffset enthält, den die MDL angibt. Das MappedSystemVa-Feld der MDL, das von dieser Funktion festgelegt wird, enthält jedoch nicht den Byteoffset.

  • Sobald der Aufrufer nicht mehr auf den Arbeitsspeicher zugreifen muss, hebt er die Zuordnung des Arbeitsspeichers mit MmUnmapReservedMapping auf. Der Aufrufer kann den Speicherpuffer bei Bedarf zuordnen und die Zuordnung aufheben und muss die Zuordnung aufheben, bevor der Zuordnungsbereich mit MmFreeMappingAddress freigegeben wird.

Beachten Sie, dass der MappingAddress-Parameter den Anfang des Speicherbereichs angibt, der zuvor vom Aufrufer reserviert wurde, nicht den Anfang des zu zuordnenden Speicherunterbereichs. Der Aufrufer gibt die Startadresse und länge des Puffers an, wenn er die MDL mit IoAllocateMdl zuordnet. Der Puffer muss innerhalb des reservierten Speicherbereichs passen, kann aber eine strikte Teilmenge sein.

Die Routine verwendet den CacheType-Parameter nur, wenn den seiten, die von der MDL beschrieben werden, noch kein Cachetyp zugeordnet ist. 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 von dieser Regel gilt für Seiten, die von MmAllocatePagesForMdl zugeordnet werden und denen kein bestimmter Cachetyp zugeordnet ist. Für solche Seiten bestimmt der CacheType-Parameter den Cachetyp der Zuordnung.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows XP und höheren Versionen von Windows.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport)

Weitere Informationen

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping