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


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

Чтобы определить код, выполняющийся на уровне IRQL >= DISPATCH_LEVEL, используйте макрос PAGED_CODE. В режиме отладки этот макрос генерирует сообщение, если код выполняется на уровне IRQL >= DISPATCH_LEVEL. Добавьте макрос в качестве первой инструкции в подпрограмму, чтобы пометить всю подпрограмму как код страницы, как показано в следующем примере:

NTSTATUS 
MyDriverXxx( 
    IN OUT PVOID ParseContext OPTIONAL, 
    OUT PHANDLE Handle 
    ) 
{ 
    NTSTATUS Status; 
 
    PAGED_CODE(); 
. 
. 
. 
} 

Чтобы убедиться, что вы делаете это правильно, запустите проверяющего драйвера с включенным параметром Принудительная проверка IRQL. Этот параметр приводит к тому, что система автоматически выгружает в файл подкачки весь код, подлежащий выгрузке, каждый раз, когда драйвер повышает IRQL до уровня DISPATCH_LEVEL или выше. С помощью средства проверки драйверов вы можете быстро найти все ошибки драйвера в этой области. В противном случае эти ошибки, как правило, будут найдены только клиентами, и они часто могут быть очень трудными для воспроизведения.