ScsiPortWmiDispatchFunction 函数 (scsiwmi.h)
ScsiPortWmiDispatchFunction 例程是支持 WMI 的微型端口驱动程序的调度例程。
语法
BOOLEAN ScsiPortWmiDispatchFunction(
[in] PSCSI_WMILIB_CONTEXT WmiLibInfo,
[in] UCHAR MinorFunction,
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] PVOID DataPath,
[in] ULONG BufferSize,
[in] PVOID Buffer
);
参数
[in] WmiLibInfo
指向 SCSI_WMILIB_CONTEXT 结构的指针,该结构包含微型端口驱动程序的数据块和事件块的注册信息,并定义微型端口驱动程序的 WMI 库回调例程的入口点。
[in] MinorFunction
指示要执行的 WMI 操作。 微型端口驱动程序从输入 SRB 将 MinorFunction 设置为 Srb-WmiSubFunction>。
[in] DeviceContext
指向微型端口驱动程序定义的上下文值的指针。 端口驱动程序会将 DeviceContext 传递到微型端口驱动程序的 HwScsiWmiXxx 回调例程。 此值通常指向HW_DEVICE_EXTENSION结构。
[in] RequestContext
指向包含 WMI SRB 上下文信息的SCSIWMI_REQUEST_CONTEXT结构的指针。 如果 SRB 可以写入,微型端口驱动程序必须从 SRB 扩展分配此结构,因为请求上下文必须保持有效,直到 ScsiPortWmiPostProcess 返回最终 SRB 返回状态和缓冲区大小。 ScsiPortWmiDispatchFunction 会将 RequestContext 传递给处理此请求的微型端口驱动程序的回调例程。
[in] DataPath
指向 GUID 的指针,该 GUID 表示与请求关联的数据块。 微型端口驱动程序将 DataPath 从输入 SRB 设置为 Srb-DataPath>。
[in] BufferSize
指定数据缓冲区的大小(以字节为单位)。 微型端口驱动程序将 BufferSize 从输入 SRB 设置为 Srb-DataTransferLength>。
[in] Buffer
指向数据缓冲区的指针。 微型端口驱动程序从输入 SRB 将 Buffer 设置为 Srb-DataBuffer>。
返回值
如果请求挂起,则 ScsiPortWmiDispatchFunction 返回 TRUE;如果请求已完成,则返回 FALSE。
注解
当微型端口驱动程序收到 函数 成员设置为SRB_FUNCTION_WMI的 SRB 时,它会使用请求参数(包括指向初始化的SCSI_WMILIB_CONTEXT结构的指针)调用 ScsiPortWmiDispatchFunction 。 此结构包含有关微型端口驱动程序的数据块和事件块的信息,并定义微型端口驱动程序的 HwScsiWmiXxx 回调例程的入口点。
ScsiPortWmiDispatchFunction 确认 SRB 是 WMI 请求,并确定请求指定的块是否对微型端口驱动程序有效。 如果满足这些条件, ScsiPortWmiDispatchFunction 会通过调用微型端口驱动程序SCSI_WMILIB_CONTEXT结构中的相应 HwScsiWmiXxx 入口点来处理 SRB。 如果微型端口驱动程序未为可选的 HwScsiWmiXxx 例程定义入口点,则端口驱动程序将处理请求。
在任一情况下, 在 ScsiPortWmiDispatchFunction 返回后,微型端口驱动程序应针对它未写入的请求执行以下操作:
- 将 Srb->DataTransferLength 设置为 ScsiPortWmiGetReturnSize 返回的值
- 将 Srb->SrbStatus 设置为 ScsiPortWmiGetReturnStatus 返回的值
- 使用 RequestComplete 调用 ScsiPortNotification,并使用 NextRequest 再次调用
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | scsiwmi.h (包括 Miniport.h、Scsi.h) |