Поделиться через


Обнаружение кода, который может быть страничной

Чтобы обнаружить код, который выполняется в 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 или выше. С помощью средства проверки драйверов можно быстро найти все ошибки драйвера в этой области. В противном случае эти ошибки, как правило, будут находиться только клиентами, и их часто бывает очень трудно воспроизвести.