Compartilhar via


Função MmBuildMdlForNonPagedPool (wdm.h)

A rotina MmBuildMdlForNonPagedPool recebe um MDL que especifica um buffer de memória virtual nãopagado e o atualiza para descrever as páginas físicas subjacentes.

Sintaxe

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

Parâmetros

[in, out] MemoryDescriptorList

Um ponteiro para um MDL que especifica um buffer de memória virtual na memória nãopagada. O chamador usou a rotina IoAllocateMdl para criar o MDL para esse buffer.

Retornar valor

Nenhum

Comentários

Na entrada, o MDL especificado deve descrever um buffer na memória do sistema nãopagada ou na memória bloqueada (as páginas físicas não podem ser negociadas), como a memória alocada pela rotina ExAllocatePoolWithTag com PoolType = NonPagedPool ou pela rotina MmAllocateContiguousMemorySpecifyCache . MmBuildMdlForNonPagedPool atualiza o MDL para descrever as páginas físicas subjacentes.

MmBuildMdlForNonPagedPool pode não ser usado com MDLs que descrevem buffers alocados em uma pilha de kernel. Para criar um MDL que descreve um buffer de pilha de kernel, os drivers devem chamar MmProbeAndLockPages. Isso ocorre porque as páginas de pilha de kernel podem ser negociadas, a menos que sejam de investigação e bloqueadas. Essa regra se aplica mesmo que o driver garanta que a pilha de kernel não possa ser paginada.

Como as páginas descritas pelo MDL já não podem ser publicadas e já estão mapeadas para o espaço de endereço do sistema, os drivers não devem tentar bloqueá-las usando a rotina MmProbeAndLockPages ou criar mapeamentos adicionais de espaço de endereço do sistema usando a rotina MmMapLockedPagesSpecifyCache . Da mesma forma, os drivers não devem tentar desbloquear as páginas usando a rotina MmUnlockPages ou liberar o mapeamento de espaço de endereço do sistema existente usando a rotina MmUnmapLockedPages . Se um driver executar qualquer uma dessas operações ilegais em um MDL criado por MmBuildMdlForNonPagedPool, o comportamento resultante será indefinido.

É permitido passar um MDL criado por MmBuildMdlForNonPagedPool para a rotina MmGetSystemAddressForMdlSafe . A chamada MmGetSystemAddressForMdlSafe , nesse caso, simplesmente retorna o endereço virtual inicial do buffer descrito pelo MDL.

Um driver pode usar a rotina MmMapLockedPagesSpecifyCache para mapear um MDL criado por MmBuildMdlForNonPagedPool no espaço de endereço virtual do usuário. No entanto, o driver deve executar essa operação de forma a evitar determinados problemas de segurança. Para obter mais informações, consulte MmMapLockedPagesSpecifyCache.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=DISPATCH_LEVEL

Confira também

ExAllocatePoolWithTag

MmAllocateContiguousMemorySpecifyCache

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages