端口驱动程序如何处理 WMI 请求
Windows 通过发送 I/O 请求数据包 (IRP) 类型IRP_MJ_SYSTEM_CONTROL,通知 WMI 请求的存储端口驱动程序,如 Windows Management Instrumentation 中所述。 系统控件 IRP 可以包含表示 WMI 操作的任何次要 IRP 编号。 有关详细信息,请参阅 WMI 次要 IRP。
若要使用 使用 SCSI 端口 WMI 库 处理 WMI SRB,SCSI 微型端口驱动程序必须提供一系列对应于 WMI 次要 IRP 编号的回调例程。 下表说明了微型端口驱动程序回调例程与其相应的 WMI 次要 IRP 编号之间的关系。
WMI IRP 次要编号 | 微型端口驱动程序回调例程 |
---|---|
HwScsiWmiSetDataBlock |
|
HwScsiWmiFunctionControl |
|
HwScsiWmiFunctionControl |
|
HwScsiWmiFunctionControl |
每个微型端口驱动程序回调例程都应提供与相应的 WMI 次要 IRP 编号或数字关联的功能。 某些例程(如 HwScsiWmiFunctionControl)必须能够提供与多个 WMI 次要 IRP 编号对应的功能。
微型端口驱动程序将调用 SCSI 端口 WMI 库调度例程 ScsiPortWmiDispatchFunction,然后调度例程将调用相应的微型端口驱动程序回调例程。 端口驱动程序将 WMI 次要 IRP 号码传输到 SRB,以便调度例程可以咨询 SRB 以确定要调用的回调例程。
下图说明了从存储端口驱动程序收到 WMI 请求到存储微型端口驱动程序将其传递给 SCSI 端口 WMI 库调度例程的那一刻起所经历的更改。
以下步骤说明存储堆栈如何将 WMI IRP 重新打包为 SRB:
Windows 通过发送 类型为 IRP_MJ_SYSTEM_CONTROL 的 IRP,通知 WMI 请求的存储端口驱动程序。
端口驱动程序将 WMI IRP 重新打包为 SCSIWMI_REQUEST_CONTEXT 类型的 WMI SRB,并将值 SRB_FUNCTION_WMI 分配给 SRB 的 Function 成员。 端口驱动程序将次要 WMI IRP 编号传输到 SRB WMISubFunction 成员。 并安排 I/O 管理器通过调用 IoStartPacket 来调用微型端口驱动程序的启动 I/O 例程 HwScsiStartIo。
微型端口驱动程序调用 SCSI 端口 WMI 库调度例程来处理 SRB。 有关详细信息,请参阅 使用 SCSI 端口 WMI 库。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈