Storport 验证

Storport 验证功能监视 Storport 微型端口驱动程序与端口驱动程序之间的交互。 如果微型端口驱动程序滥用例程、错误地响应来自端口驱动程序的请求,或者花费过多的时间响应请求,则会发出 bug 检查。

注意

Storport 验证功能仅在 Windows Vista 和更高版本的 Windows 中可用。

Storport 验证检测到的冲突

Storport 验证功能可以检测 Storport 例程的多次滥用。 还可以单独禁用其中一些检查。

如果 Storport 微型端口驱动程序提交以下冲突之一,Storport 验证功能会发出 bug 检查 0xF1或 bug 检查 0xC4:

  • 微型端口驱动程序将错误参数 (NULL 指针) 传递给 StorPortInitialize 例程。

  • 微型端口驱动程序调用 StorPortStallExecution 并指定超过 0.1 秒的延迟,使处理器停止超过一段时间。

  • StorPortFreeDeviceBase 只能从微型端口驱动程序的 HwStorFindAdapter 例程调用。

  • StorPortGetUncachedExtension 只能从微型端口驱动程序的 HwStorFindAdapter 例程调用,并且只能对总线主适配器调用。 在调用 StorPortGetUncachedExtension 之前,微型端口必须设置 HW_INITIALIZATION_DATA (Storport) 结构的 SrbExtensionSize

  • StorPortGetDeviceBase 例程仅支持系统即插即用 (PnP) 管理器分配给驱动程序的地址。

  • 微型端口驱动程序将无效的虚拟地址传递给 StorPortReadxxxStorPortWritexxx 例程之一, (例如 StorPortReadRegisterUcharStorPortWritePortBufferUlong) 。 这通常意味着提供的地址不会映射到公共缓冲区区域。 指定的 寄存器端口 必须位于 StorPortGetDeviceBase 例程返回的映射内存空间范围内。 此检查仅在基于 x86 的系统上受支持。

有关 Storport 验证使用的 bug 检查参数的列表,请参阅 bug 检查0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION) 。 除了 Bug 检查0xF1,Storport 验证还利用 Bug 检查0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) 。

注意

Bug 检查0xF1 用于 SCSI 验证和 Storport 验证。

激活 Storport 验证选项

激活 Storport 验证选项的过程不同于激活其他驱动程序验证程序选项的过程。

  1. 使用驱动程序验证程序管理器或 Verifier.exe 命令行,启动微型端口驱动程序的验证。 由于 Storport 验证作为选项不可用,因此必须至少选择 一个其他 驱动程序验证程序选项。 有关详细信息,请参阅 选择驱动程序验证程序选项选择要验证的驱动程序

  2. 使用 regedit.exe打开注册表。 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorPort 键中,添加名为 “验证程序”的子项。 如果 StorPort 密钥不存在,则需要创建它。 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\STORPort\Verifier键中,添加名为 VerifyLevel的REG_DWORD项。 分配给此条目的值将确定哪些 Storport 验证测试将处于活动状态。 值0x1将提供最大验证。

  3. 重新启动计算机。

如果 VerifyLevel 值不存在,或等于 0xFFFFFFFF,则将禁用 Storport 验证。

在不重新启动的情况下激活

通常,如果不重启 (重启) 任何 Windows 操作系统上的计算机,则无法激活或停用 Storport 验证。 StorPort.sys驱动程序仅在加载时读取 VerifyLevel 注册表项,这通常在启动时。 但是,如果在添加注册表项时未加载 StorPort.sys 驱动程序,或者卸载并重新加载该驱动程序,则可以在 Windows Vista 和更高版本的 Windows 上启用 Storport 验证,而无需重新启动计算机。