检测可分页的代码
若要检测在 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,并且它们通常很难重现。