强制 IRQL 检查

强制 IRQL 检查

尽管禁止内核模式驱动程序在高 IRQL 或者在持有旋转锁时访问可分页内存,但是,如果页面尚未从工作集实际删除并分页到磁盘,可能不会通知此类操作。

当启用强制 IRQL 检查时,驱动程序验证程序对系统内存的使用提供极高的压力。每当被验证的驱动程序请求旋转锁时,将调用 KeSynchronizeExecution,或者将 IRQL 提升到 DISPATCH_LEVEL 或更高级别,系统的所有可分页池、代码和数据(包括驱动程序的可分页代码和数据)将从工作集中删除。如果驱动程序尝试访问此内存的任何内容,驱动程序验证程序将发送错误检查。

从 Windows Vista 开始,此选项还导致驱动程序验证程序检测特定同步对象何时包括在可分页内存中。 无法对这些同步对象进行分页,原因是操作系统内核正在提升的 IRQL 级别访问它们。 驱动程序验证程序可以检测可分页 KTIMER、PRKMUTEX、PKSPIN_LOCK、PRKEVENT、PKSPIN_LOCK、PRKSEMAPHORE、PERESOURCE 和 FAST_MUTEX 结构。

对内存使用的压力不会直接影响未选择用于验证的驱动程序。当未选择用于验证的驱动程序提升 IRQL 时,它不会触发删除操作。不过,当被验证的驱动程序提升 IRQL 时,驱动程序验证程序将删除可以由未被验证的驱动程序使用的页面。因此,当此选项处于活动状态时,可能偶尔捕获由未被验证的驱动程序提交的错误。

监控 IRQL 提升和旋转锁

可以监控 IRQL 提升次数、旋转锁和被验证的驱动程序对 KeSynchronizeExecution 的调用。还可以监控驱动程序验证程序已经从工作集中删除可分页内存的次数。这些统计信息可以由驱动程序验证程序管理器、Verifier.exe 命令行显示或在日志文件中显示。有关详细信息,请参阅监控全局计数器

内核调试程序扩展 !verifier 还可用于监控这些统计信息。它所显示的信息与驱动程序验证程序管理器所显示的信息类似。在 Windows XP 及更高版本中,!verifier 0x8 扩展将显示由被验证的驱动程序最近对 IRQL 进行的更改。有关调试程序扩展的信息,请参阅 Windows 调试

在 DISPATCH_LEVEL 或更高级别上调用 KeEnterCriticalRegion 或 KeLeaveCriticalRegion

KeEnterCriticalRegionKeLeaveCriticalRegion 是两个 API,可用于同步一个关键的驱动程序代码的执行与普通的内核异步过程调用 (APC) 的交付。KeEnterCriticalRegionKeLeaveCriticalRegion API 无法在 IRQL = DISPATCH_LEVEL 或更高级别上调用。在 DISPATCH_LEVEL 或更高级别上调用 KeEnterCriticalRegionKeLeaveCriticalRegion 可能导致系统挂起或内存损坏。

从 Windows 7 开始,如果启用了强制 IRQL 检查选项,驱动程序验证程序会在 DISPATCH_LEVEL 或更高级别上检测对这些 API 的调用。

激活此选项

通过使用驱动程序验证程序管理器或 Verifier.exe 命令行,可以为一个或多个驱动程序激活强制 IRQL 检查功能。有关详细信息,请参阅选择驱动程序验证程序选项

  • 使用命令行

    在命令行,强制 IRQL 验证选项由 Bit 1 (0x2) 表示。要激活强制 IRQL 检查,请使用标志值 0x2 或将 0x2 添加到该标志值。例如:

    
    verifier /flags 0x2 /driver MyDriver.sys
    
    

    该功能将在下次启动时激活。

    在 Windows 2000 及更高版本的 Windows 上,还可以通过将 /volatile 参数添加到此命令激活和停用强制 IRQL 检查而不用重启计算机。例如:

    
    verifier /volatile /flags 0x2 /adddriver MyDriver.sys
    
    

    此设置将立即生效,但在关闭或重启计算机时将丢失。有关详细信息,请参阅使用易失性设置

    强制 IRQL 检查功能还包括在标准设置中。例如:

    
    verifier /standard /driver MyDriver.sys
    
    
  • 使用驱动程序验证程序管理器
    1. 启动驱动程序验证程序管理器。在“命令提示符”窗口中键入 Verifier
    2. 选择“创建自定义设置(供程序开发人员使用)”,然后单击“下一步”
    3. 选择“从一个完整的列表选择单个设置”
    4. 选择(选中)“强制 IRQL 检查”

    强制 IRQL 检查功能还包括在标准设置中。要使用此功能,请在驱动程序验证程序管理器中单击“创建标准设置”

 

 

显示:
© 2016 Microsoft