Função MmProtectDriverSection (wdm.h)
O MmProtectDriverSection somente leitura protege uma seção de um driver carregado usando os serviços fornecidos pelo VSM (Modo de Segurança Virtual).
Sintaxe
NTSTATUS MmProtectDriverSection(
[in] PVOID AddressWithinSection,
[in] SIZE_T Size,
[in] ULONG Flags
);
Parâmetros
[in] AddressWithinSection
Um ponteiro para uma seção de dados válida que pertence a uma imagem de driver. A seção de dados ainda não deve ser executável, caso contrário, a API falhará com STATUS_INVALID_PAGE_PROTECTION.
[in] Size
No momento, esse parâmetro está reservado para uso futuro e deve ser definido como 0.
[in] Flags
Especifique os sinalizadores que controlam a operação: MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD – usado para especificar que o driver ainda pode ser descarregado após a proteção da seção.
Valor de retorno
MmProtectDriverSection retorna um valor NTSTATUS que indica o resultado da operação:
Valor de retorno | Descrição |
---|---|
|
A operação foi concluída com êxito e a seção de driver foi protegida com êxito |
|
O VSM (Modo de Segurança Virtual) está desabilitado no momento para que a função não possa proteger a seção de driver. |
|
Uma máscara de bits de sinalizadores inválida (ou um tamanho diferente de zero) foi especificada. |
|
A seção do driver especificada por um endereço contido nela é mapeada por meio de uma proteção inválida (não há suporte para seções executáveis) |
|
A seção especificada pertence a um driver que não tem suporte nessa API (consulte Comentários). |
|
A seção especificada é descartável ou contém lacunas, que não são apoiadas por nenhuma memória física. Isso geralmente acontece quando um alinhamento de seção é maior que um tamanho de página. |
|
A seção especificada já foi protegida. |
Observações
A rotina protege a memória física que faz backup da seção do driver usando a tabela SLAT (tradução de endereço de segundo nível) gerenciada pelo VSM. A memória protegida será feita somente leitura para todo o Sistema Operacional.
Observe que, após a proteção da seção, não há como remover a proteção. Isso é por design: a única exceção dessa regra é quando o chamador especifica o sinalizador de MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD. Nesse caso, quando o driver de destino é descarregado, a seção protegida é liberada e liberada.
Drivers mapeados com páginas grandes e drivers de sessão não são compatíveis com a API MmProtectDriverSection. Além disso, os chamadores dessa API não podem solicitar a proteção de uma seção de descarte ou uma seção que contenha a IAT (Tabela de Endereços de Importação).
Observe que, se o chamador especificar um endereço que não pertence a nenhuma imagem de driver carregada, o sistema falhará com a verificação de bugs MEMORY_MANAGEMENT (tipo 0x1100).
Os chamadores da API MmProtectDriverSection devem ser executados no <DO IRQL = APC_LEVEL.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows Insider 19548. |
da Plataforma de Destino | Universal |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |