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.
Retornar valor
MmProtectDriverSection retorna um valor NTSTATUS que indica o resultado da operação:
Valor retornado | Descrição |
---|---|
|
A operação foi concluída com êxito e a seção do driver foi protegida com êxito |
|
No momento, o VSM (Modo de Segurança Virtual) está desabilitado para que a função não possa proteger a seção do 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 nele é 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 é compatível com essa API (consulte Comentários). |
|
A seção especificada é descartada 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. |
Comentários
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, depois que a seção tiver sido protegida, não há como remover a proteção. Isso é por design: a única exceção dessa regra é quando o chamador especifica o sinalizador 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 para proteger uma seção descartado ou uma seção que contenha o 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 em IRQL <= APC_LEVEL.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows Insider 19548. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |