Storport 验证

Storport 验证功能监视 Storport 微型端口驱动程序与端口驱动程序之间的交互。 如果微型端口驱动程序误用了一个例程,响应来自端口驱动程序的请求,或者需要大量时间来响应请求,则会发出 bug 检查。

注意

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

Storport 验证检测到的冲突

Storport 验证功能可检测到 Storport 例程的几个误用了。 还可以单独禁用其中一些检查。

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

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

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

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

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

  • StorPortGetDeviceBase例程仅支持由 system 即插即用 (PnP) manager 分配给驱动程序的地址。

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

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

注意

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

激活 Storport 验证选项

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

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

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

  3. 重新启动计算机。

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

激活而不重新启动

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