SCSI_WMI_REQUEST_BLOCK 结构 (srb.h)
此结构是用于 WMI 命令的 SCSI_REQUEST_BLOCK 的特殊版本。
语法
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,并且 PathId、 TargetId 和 Lun 是保留的)。 否则,WMIFlags 将为 NULL,表示请求针对由 PathId、TargetId 和 Lun 指定的设备。
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) |