Detectando código que pode ser paginável
Para detectar o código executado em IRQL >= DISPATCH_LEVEL, use a macro PAGED_CODE . No modo de depuração, essa macro gerará uma mensagem se o código for executado em IRQL >= DISPATCH_LEVEL. Adicione a macro como a primeira instrução em uma rotina para marcar toda a rotina como código paginado, como mostra o exemplo a seguir:
NTSTATUS
MyDriverXxx(
IN OUT PVOID ParseContext OPTIONAL,
OUT PHANDLE Handle
)
{
NTSTATUS Status;
PAGED_CODE();
.
.
.
}
Para garantir que você esteja fazendo isso corretamente, execute o Verificador de Driver em seu driver concluído com a opção Forçar Verificação IRQL habilitada. Essa opção faz com que o sistema remova automaticamente todos os códigos pagináveis sempre que o driver gera IRQL para DISPATCH_LEVEL ou superior. Usando o Verificador de Driver, você pode encontrar rapidamente quaisquer bugs de driver nessa área. Caso contrário, esses bugs normalmente serão encontrados apenas por clientes e eles geralmente podem ser muito difíceis de reproduzir.