Freigeben über


MmBuildMdlForNonPagedPool-Funktion (wdm.h)

Die MmBuildMdlForNonPagedPool Routine empfängt eine MDL, die einen nicht ausgelagerten virtuellen Speicherpuffer angibt, und aktualisiert ihn, um die zugrunde liegenden physischen Seiten zu beschreiben.

Syntax

void MmBuildMdlForNonPagedPool(
  [in, out] PMDL MemoryDescriptorList
);

Parameter

[in, out] MemoryDescriptorList

Ein Zeiger auf eine MDL, die einen virtuellen Speicherpuffer im nicht ausgelagerten Speicher angibt. Der Aufrufer hat die IoAllocateMdl Routine verwendet, um die MDL für diesen Puffer zu erstellen.

Rückgabewert

Nichts

Bemerkungen

Bei der Eingabe muss die angegebene MDL einen Puffer im nichtpageierten Systemspeicher oder im Speicher beschreiben, der gesperrt ist (die physischen Seiten können nicht gehandelt werden), z. B. speicher, der vom ExAllocatePoolWithTag Routine mit PoolType = NonPagedPool oder von der MmAllocateContiguousMpecifyCache Routine zugewiesen wird. MmBuildMdlForNonPagedPool aktualisiert die MDL, um die zugrunde liegenden physischen Seiten zu beschreiben.

MmBuildMdlForNonPagedPool- dürfen nicht mit MDLs verwendet werden, die Puffer beschreiben, die einem Kernelstapel zugeordnet sind. Um eine MDL zu erstellen, die einen Kernelstapelpuffer beschreibt, müssen Treiber MmProbeAndLockPagesaufrufen. Dies liegt daran, dass Kernelstapelseiten gehandelt werden können, es sei denn, sie sind probe-and-locked. Diese Regel gilt auch, wenn der Treiber garantiert, dass der Kernelstapel nicht ausgelagert werden kann.

Da die von der MDL beschriebenen Seiten bereits nicht seitenfähig sind und bereits dem Systemadressraum zugeordnet sind, dürfen Treiber nicht versuchen, sie mithilfe der MmProbeAndLockPages Routine zu sperren oder zusätzliche Systemadressraumzuordnungen mithilfe der MmMapLockedPagesSpecifyCache Routine zu erstellen. Ebenso dürfen Treiber nicht versuchen, die Seiten mithilfe der MmUnlockPages Routine zu entsperren oder die vorhandene Systemadressraumzuordnung mithilfe der MmUnmapLockedPages Routine freizugeben. Wenn ein Treiber einen dieser illegalen Vorgänge für eine MDL ausführt, die von MmBuildMdlForNonPagedPool erstellt wird, das resultierende Verhalten nicht definiert ist.

Das Übergeben einer von MmBuildMdlForNonPagedPool erstellten MDL an die MmGetSystemAddressForMdlSafe Routine ist zulässig. Der MmGetSystemAddressForMdlSafe Aufrufs gibt in diesem Fall einfach die virtuelle Startadresse des Puffers zurück, der von der MDL beschrieben wird.

Ein Treiber kann die MmMapLockedPagesSpecifyCache Routine verwenden, um eine MDL zuzuordnen, die von MmBuildMdlForNonPagedPool in den virtuellen Adressraum des Benutzers erstellt wird. Der Treiber muss diesen Vorgang jedoch so ausführen, dass bestimmte Sicherheitsprobleme vermieden werden. Weitere Informationen finden Sie unter MmMapLockedPagesSpecifyCache.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <=DISPATCH_LEVEL

Siehe auch

ExAllocatePoolWithTag-

MmAllocateContiguousMemorySpecifyCache

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache-

MmProbeAndLockPages

MmUnlockPages-

MmUnmapLockedPages