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 |