使用 SCSI 端口 WMI 库

充当 WMI 提供程序的存储微型端口驱动程序可以使用 SCSI 端口 WMI 库来简化处理包含 WMI 命令 (SRB) SCSI 请求块的任务。 微型端口驱动程序的启动 I/O 例程 HwScsiStartIo 将 WMI SRB 中的相关信息传递给 SCSI 端口 WMI 库,以便通过调用 ScsiPortWmiDispatchFunction 库的调度例程进行处理。 微型端口驱动程序会将以下数据传递给调度例程:

  • WmiLibInfo 参数中: 一个SCSI_WMILIB_CONTEXT 结构,其中包含指向微型端口驱动程序的回调例程的指针。

  • WMISubFunction 参数中:SRB 的 WMISubFunction 成员中的值。

  • DeviceContext 参数中:指向设备扩展的指针。

  • RequestContext 参数中:SCSI 端口 WMI 库用于记录信息 如返回的数据的状态和大小)SCSIWMI_REQUEST_CONTEXT类型的请求上下文结构。

  • DataPath 参数中:SRB 的 DataPath 成员中的值。

  • BufferSize 参数中:SRB 的 DataTransferLength 成员中的值。

  • Buffer 参数中:SRB 的 DataBuffer 成员中的值。

初始化微型端口驱动程序时,它必须使用指向所需微型端口驱动程序回调例程的指针填充 SCSI_WMILIB_CONTEXT 结构,然后将该结构存储在特定于微型端口驱动程序的存储区域(如驱动程序扩展)中。 每个微型端口驱动程序回调例程对应于一个次要 IRP 编号,如 端口驱动程序如何处理 WMI 请求中所述。 有关如何设计微型端口驱动程序回调例程的信息,请参阅 设计 WMI 微型端口驱动程序回调例程

SCSI_WMILIB_CONTEXT 结构的 GuidList 成员必须指向 类型为 SCSIWMIGUIDREGINFO 的元素数组,这些元素包含有关 GUID 的信息,这些 GUID 唯一标识 MOF 文件中定义的受支持 WMI 类。 以下代码片段演示了此类元素数组的定义:

SCSIWMIGUIDREGINFO GuidList[] = 
{
  {
    &HBAStatisticsGUID,  // Guid
    3,  // number of instances of this class
    0  // flags
  },
  {
    &HBAAttributesGUID, // guid
    1,  // number of instances of this class
    0  // flags
  }
};

数组包含有关两个 WMI 类的 GUID 的信息: HBAStatisticsHBAAttributes。 GUID 的符号常量取自头文件,该文件是通过编译 MOF 文件生成的,该文件使用 WMI 工具套件 (mofcompwmimofck 工具) 定义两个类。 有关如何使用这些工具的详细信息,请参阅编译驱动程序的 MOF 文件和使用wmimofck.exe

WMI 工具套件通过将“GUID”的后缀连接到 WMI 类的名称,为 GUID 生成符号常量的名称。 例如,对于 HBAStatistics 类, 该工具将创建一个名为 HBAStatisticsGUID 的 符号常量,该常量表示该类的 GUID。