检测可分页的代码

若要检测在 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 或更高版本时,系统都会自动分页出所有可分页代码。 使用驱动程序验证程序,可以快速找到此区域中的任何驱动程序 bug。 否则,通常只有客户才能发现这些 bug,并且它们通常很难重现。