系统性资源不足模拟

系统性低资源模拟选项会在内核模式驱动程序中模拟资源故障。 此选项渗透到驱动程序错误处理路径。 测试这些路径历来非常困难。 系统资源不足模拟选项以可预测的方式注入资源故障,从而使发现的问题可以重现。 由于错误路径易于重现,因此还可以轻松验证这些问题的修复。

为了帮助你确定错误的根本原因,提供了一个调试器扩展,可以确切地告诉你注入了哪些故障以及按什么顺序。

谨慎 在验证计算机上的所有(或大量)驱动程序时,此选项不适合使用。 只有在对单个驱动程序或其附加的筛选器驱动程序执行有针对性的测试时,才应使用此选项。 同时对大量驱动程序使用此选项可能会导致不可预知的结果,并可能强制在与要测试的驱动程序无关的组件中崩溃。

注意 对于 Windows 8.1,WDK 8 中提供的 基于堆栈的故障注入 功能已集成到驱动程序验证程序中。 在运行 Windows 8.1 的计算机上,使用系统化低资源模拟选项。

在特定驱动程序上启用系统化低资源模拟选项时,它会截获该驱动程序到内核的一些调用,并 Ndis.sys。 低资源仿真系统会检查调用堆栈,特别是来自所启用驱动程序的那部分调用堆栈。 如果这是它第一次看到该堆栈,根据该调用的语义,调用将失败。 否则,如果之前已看到该调用,它将通过未更改的传递。 系统性低资源模拟包含用于处理驱动程序多次加载和卸载的逻辑。 它将识别调用堆栈是相同的,即使驱动程序重新加载到不同的内存位置。

激活此选项

可以使用驱动程序验证管理器或 Verifier.exe 命令行,为一个或多个驱动程序激活有系统的低资源仿真功能。 有关详细信息,请参阅 “选择驱动程序验证程序选项”。 必须重新启动计算机才能激活或停用系统性低资源模拟选项。

  • 在命令行

    Windows 11

    在命令行中,系统较低的资源模拟由 验证程序 /rc 19 36验证程序 /dif 19 表示,这两者都包含所需的 DIF 模式。

    下一次启动后,该功能将处于活动状态;如果在命令字符串中加入 /now,则该功能会立即激活。

    Windows 10 及更低版本

    在命令行中,系统性低资源模拟由 Verifier /flags 0x040000 (Bit 18) 表示。 若要系统化低资源模拟,请使用标志值0x040000或向标志值添加0x040000。 例如:

    verifier /flags 0x040000 /driver MyDriver.sys
    

    下一次启动后,该功能将处于活动状态。

    常规

    启用系统低资源模拟选项时,可以使用 /faultssystematicOPTION 命令行选项进一步控制系统低资源模拟。

    选择 DESCRIPTION

    enableboottime

    在多次计算机重启过程中启用故障注入。

    disableboottime

    在计算机重新启动时禁用错误注入(这是默认设置)。

    记录启动时间

    在计算机重启期间,“假设”模式启用故障注入。

    重置启动时间

    在计算机重新启动时禁用错误注入,并清除堆栈排除列表。

    enableruntime

    动态启用故障注入。

    disableruntime

    动态禁用故障注入功能。

    记录运行时间

    动态启用“假设”模式下的故障注入。

    resetruntime

    动态禁用故障注入并清除以前出错的堆栈列表。

    querystatistics

    显示当前的故障注入统计信息。

    增量计数器

    递增用于确定何时注入错误的测试传递计数器。

    getstackid COUNTER

    检索指示的注入堆栈标识符。

    excludestack STACKID

    从故障注入中排除堆栈。

  • 使用驱动程序验证管理器

    1. 启动驱动程序验证程序管理器。 在命令提示符窗口中键入 验证程序
    2. 选择 “创建自定义设置”(面向代码开发人员), 然后单击“ 下一步”。
    3. 从完整列表中选择单个设置
    4. 选择(检查) 系统性低资源模拟
    5. 重启电脑

调试系统性资源不足模拟导致的错误检查

系统化的低资源模拟发现的大部分问题都会导致错误检查。 为了帮助确定这些代码 bug 的原因, 适用于 Windows 的调试工具 提供调试器扩展(kdexts.dll)和必要的符号。

运行调试器扩展

  • 在调试器命令提示符下,键入以下命令:

    !verifier 0x800
    

这会将信息输出到调试器,显示最近注入失败的调用堆栈。