Обнаружение кода, который может быть страничной
Чтобы обнаружить код, который выполняется в IRQL >= DISPATCH_LEVEL, используйте макрос PAGED_CODE . В режиме отладки этот макрос создает сообщение, если код выполняется в среде IRQL >= DISPATCH_LEVEL. Добавьте макрос в качестве первого оператора в подпрограмме, чтобы пометить всю подпрограмму как страничный код, как показано в следующем примере:
NTSTATUS
MyDriverXxx(
IN OUT PVOID ParseContext OPTIONAL,
OUT PHANDLE Handle
)
{
NTSTATUS Status;
PAGED_CODE();
.
.
.
}
Чтобы убедиться, что вы делаете это правильно, запустите средство проверки драйверов для готового драйвера с включенным параметром Force IRQL Checking (Принудительная проверка IRQL ). Этот параметр приводит к тому, что система автоматически выстраивает весь страничный код каждый раз, когда драйвер вызывает IRQL до DISPATCH_LEVEL или выше. С помощью средства проверки драйверов можно быстро найти все ошибки драйвера в этой области. В противном случае эти ошибки, как правило, будут находиться только клиентами, и их часто бывает очень трудно воспроизвести.