SCSI_WMI_REQUEST_BLOCK 结构 (srb.h)

此结构是用于 WMI 命令的 SCSI_REQUEST_BLOCK 的特殊版本。

注意 SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型将来可能会更改或不可用。 建议改用 Storport 驱动程序Storport 微型端口 驱动程序模型。
 

语法

typedef struct _SCSI_WMI_REQUEST_BLOCK {
  USHORT Length;
  UCHAR  Function;
  UCHAR  SrbStatus;
  UCHAR  WMISubFunction;
  UCHAR  PathId;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  Reserved1;
  UCHAR  WMIFlags;
  UCHAR  Reserved2[2];
  ULONG  SrbFlags;
  ULONG  DataTransferLength;
  ULONG  TimeOutValue;
  PVOID  DataBuffer;
  PVOID  DataPath;
  PVOID  Reserved3;
  PVOID  OriginalRequest;
  PVOID  SrbExtension;
  ULONG  Reserved4;
  ULONG  Reserved6;
  UCHAR  Reserved5[16];
} SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;

成员

Length

指定此结构的大小(以字节为单位)。

Function

SRB_FUNCTION_WMI,它指定请求是 WMI 请求。 如果此成员未设置为 SRB_FUNCTION_WMI,微型端口驱动程序应使请求失败。

SrbStatus

返回已完成请求的状态。 此成员应由微型端口驱动程序设置,然后它通过调用 ScsiPortNotification with RequestComplete 通知特定于 OS 的驱动程序请求已完成。 此成员的值可以是 SCSI_REQUEST_BLOCK 中为 SrbStatus 列出的任何值。

WMISubFunction

指示要执行的 WMI 操作。 微型端口驱动程序调用 ScsiPortWmiDispatchFunction,其中 MinorFunction 设置为此值。 子函数值对应于标识 WMI 操作的 WMI 次要 IRP 编号。

PathId

指示请求的 SCSI 端口或总线。 此值从零开始。 如果在 WMIFlags 中设置了SRB_WMI_FLAGS_ADAPTER_REQUEST,则保留此成员。

TargetId

指示总线上的目标控制器或设备。 如果在 WMIFlags 中设置了SRB_WMI_FLAGS_ADAPTER_REQUEST,则保留此成员。

Lun

指示设备的逻辑单元号。 如果在 WMIFlags 中设置了SRB_WMI_FLAGS_ADAPTER_REQUEST,则保留此成员。

Reserved1

保留供系统使用,不能供微型端口驱动程序使用。

WMIFlags

指示 WMI 请求是针对适配器(如果设置了SRB_WMI_FLAGS_ADAPTER_REQUEST,并且 PathIdTargetIdLun 是保留的)。 否则,WMIFlags 将为 NULL,表示请求针对由 PathId、TargetIdLun 指定的设备。

Reserved2[2]

保留供系统使用,不能供微型端口驱动程序使用。

SrbFlags

指示有关请求的各种参数和选项。 SrbFlags 是只读的。 此成员将同时设置为以下一个或多个 ORed 标志:

SRB_FLAGS_DATA_IN

指示数据将从设备传输到系统。

SRB_FLAGS_DATA_OUT

指示数据将从系统传输到设备。

SRB_FLAGS_NO_DATA_TRANSFER

指示此请求未传输任何数据。 如果设置了此设置,则标志SRB_FLAGS_DATA_OUT、SRB_FLAGS_DATA_IN和SRB_FLAGS_UNSPECIFIED_DIRECTION是明确的。

SRB_FLAGS_DISABLE_SYNCH_TRANSFER

指示 HBA(如果可能)应为此传输请求执行异步 I/O。 如果以前协商过同步 I/O,则 HBA 在执行传输之前必须重新协商异步 I/O。

SRB_FLAGS_DISABLE_DISCONNECT

指示 HBA 不应允许目标在处理此请求期间断开与 SCSI 总线的连接。

DataTransferLength

指示数据缓冲区的大小(以字节为单位)。 微型端口驱动程序调用 ScsiPortWmiDispatchFunction ,将 BufferSize 设置为此值。 如果发生不足,微型端口驱动程序必须将此成员更新为实际传输的字节数。

TimeOutValue

指示请求在特定于 OS 的端口驱动程序可能认为请求超时之前可以执行的间隔(以秒为单位)。微型端口驱动程序不需要对请求进行计时,因为端口驱动程序已经这样做了。

DataBuffer

指向数据缓冲区。 微型端口驱动程序调用 ScsiPortWmiDispatchFunction缓冲区 设置为此值。 微型端口驱动程序可以将此值用作数据指针,而不考虑 HBA PORT_CONFIGURATION_INFORMATION中的 MapBuffers 值。 微型端口驱动程序无法使用 DMA 将数据直接传输到缓冲区。

DataPath

指定此请求的 WMI 数据路径。 微型端口驱动程序调用 ScsiPortWmiDispatchFunction,DataPath 设置为此值。

Reserved3

保留供系统使用,不能供微型端口驱动程序使用。

OriginalRequest

指向此请求的 IRP。 此成员与微型端口驱动程序无关。

SrbExtension

指向 Srb 扩展。 如果微型端口驱动程序在HW_INITIALIZATION_DATA中将 SrbExtensionSize 设置为零,则不得使用此成员。 SrbExtension 中的内存不是由特定于 OS 的端口驱动程序初始化的,并且微型端口驱动程序确定的数据可以直接由 HBA 访问。 可以通过使用 SrbExtension 指针调用 ScsiPortGetPhysicalAddress 来获取相应的物理地址。

Reserved4

保留供系统使用,不能供微型端口驱动程序使用。

Reserved6

保留供系统使用,不能供微型端口驱动程序使用。 此成员从 Sp1 的 Windows Server 2003 开始有效。

Reserved5[16]

保留供系统使用,不能供微型端口驱动程序使用。

注解

Windows NT存储类和筛选器驱动程序可以将 WMI SRB 发送到系统端口驱动程序。 系统端口驱动程序将代表微型端口驱动程序处理某些 WMI 请求。 如果端口驱动程序无法处理 WMI 请求,它将请求转发到微型端口驱动程序。

仅当微型端口驱动程序在 PORT_CONFIGURATION_INFORMATION 结构中设置了 WmiDataProvider 时,微型端口驱动程序才会从端口驱动程序接收 WMI 请求。 如果微型端口驱动程序支持某个请求,则它应通过调用 ScsiPortNotification 两次来处理该请求并完成该请求,先调用 RequestComplete ,然后使用 NextRequest (或 NextLuRequest) 。

有关在微型端口驱动程序中支持 WMI 的信息,请参阅 Windows Management Instrumentation

要求

要求
Header srb.h (包括 Storport.h、Srb.h、Storport.h、Minitape.h)

另请参阅

HW_INITIALIZATION_DATA (SCSI)

PORT_CONFIGURATION_INFORMATION (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortNotification

ScsiPortWmiDispatchFunction