Funzione MmBuildMdlForNonPagedPool (wdm.h)

La routine MmBuildMdlForNonPagedPool riceve un MDL che specifica un buffer di memoria virtuale non impaginato e lo aggiorna per descrivere le pagine fisiche sottostanti.

Sintassi

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

Parametri

[in, out] MemoryDescriptorList

Puntatore a un MDL che specifica un buffer di memoria virtuale in memoria non paginata. Il chiamante ha usato la routine IoAllocateMdl per creare MDL per questo buffer.

Valore restituito

nessuno

Osservazioni

In corrispondenza della voce, l'MDL specificato deve descrivere un buffer nella memoria del sistema non di pagina o in memoria bloccata (le pagine fisiche non possono essere scambiate), ad esempio la memoria allocata dalla routine ExAllocatePoolWithTag con PoolType = NonPagedPool o dalla routine MmAllocateContiguousMemorySpecifyCache . MmBuildMdlForNonPagedPool aggiorna l'MDL per descrivere le pagine fisiche sottostanti.

MmBuildMdlForNonPagedPool può non essere usato con mdls che descrivono i buffer allocati in uno stack di kernel. Per compilare un MDL che descrive un buffer dello stack di kernel, i driver devono chiamare MmProbeAndLockPages. Ciò è dovuto al fatto che le pagine dello stack del kernel possono essere scambiate a meno che non siano probe-and-locked. Questa regola si applica anche se il driver garantisce che lo stack del kernel non possa essere impaginato.

Poiché le pagine descritte dall'MDL sono già non impaginabili e sono già mappate allo spazio degli indirizzi di sistema, i driver non devono provare a bloccarli usando la routine MmProbeAndLockPages o per creare mapping aggiuntivi dello spazio indirizzi di sistema usando la routine MmMapLockedPagesSpecifyCache . Analogamente, i driver non devono provare a sbloccare le pagine usando la routine MmUnlockPages o per rilasciare il mapping dello spazio indirizzi di sistema esistente usando la routine MmUnmapLockedPages . Se un driver esegue una di queste operazioni illegali in un MDL compilato da MmBuildMdlForNonPagedPool, il comportamento risultante non è definito.

È consentito passare un MDL compilato da MmBuildMdlForNonPagedPool alla routine MmGetSystemAddressForMdlSafe . La chiamata MmGetSystemAddressForMdlSafe , in questo caso, restituisce semplicemente l'indirizzo virtuale iniziale del buffer descritto da MDL.

Un driver può usare la routine MmMapLockedPagesSpecifyCache per eseguire il mapping di un MDL compilato da MmBuildMdlForNonPagedPool nello spazio indirizzi virtuale dell'utente. Tuttavia, il driver deve eseguire questa operazione in modo da evitare determinati problemi di sicurezza. Per altre informazioni, vedere MmMapLockedPagesSpecifyCache.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=DISPATCH_LEVEL

Vedi anche

ExAllocatePoolWithTag

MmAllocateContiguousMemorySpecifyCache

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages