PSCSIWMI_EXECUTE_METHOD回调函数 (scsiwmi.h)

将调用微型端口驱动程序的 HwScsiWmiExecuteMethod 例程来执行与数据块关联的方法。 此例程是可选的。

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

语法

PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;

BOOLEAN PscsiwmiExecuteMethod(
  [in]      PVOID DeviceContext,
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG GuidIndex,
  [in]      ULONG InstanceIndex,
  [in]      ULONG MethodId,
  [in]      ULONG InBufferSize,
  [in]      ULONG OutBufferSize,
  [in, out] PUCHAR Buffer
)
{...}

参数

[in] DeviceContext

指向传递给 ScsiPortWmiDispatchFunction 的微型端口驱动程序定义的上下文值。

[in] RequestContext

指向微型端口驱动程序传递给 ScsiPortWmiDispatchFunction 的SCSIWMI_REQUEST_CONTEXT结构。

[in] GuidIndex

通过微型端口驱动程序传递给 ScsiPortWmiDispatchFunction 的 SCSI_WMILIB_CONTEXT 结构中的 GUID 列表来指定数据块的索引。

[in] InstanceIndex

如果 GuidIndex 指定的块具有多个实例, 则 InstanceIndex 将指定该实例。

[in] MethodId

指定要执行的方法的 ID。 微型端口驱动程序将方法 ID 定义为数据块中的项。

[in] InBufferSize

指示输入数据的大小(以字节为单位)。 如果没有输入数据, 则 InBufferSize 为零。

[in] OutBufferSize

指示缓冲区中可用于输出数据的字节数。

[in, out] Buffer

指向一个缓冲区,该缓冲区保存输入数据并从 方法接收输出数据(如果有)。 如果缓冲区太小,无法接收所有输出,微型端口驱动程序会调用 ScsiPortWmiPostProcess,SRB_STATUS_DATA_OVERRUN 和所需的大小。

返回值

如果请求挂起,HwScsiWmiExecuteMethod 将返回SRB_STATUS_PENDING;如果请求已完成,则返回非零 SRB 状态值。 此例程返回的 SRB 状态值与传递到 ScsiPortWmiPostProcess 的值相同。 尽管返回值数据类型为 BOOLEAN,但 HwScsiWmiExecuteMethod 例程实际上返回 SRB 状态值。

注解

当微型端口驱动程序收到函数成员设置为 SRB_FUNCTION_WMI 的 SRB 时,它会调用 ScsiPortWmiDispatchFunction,其中包含指向初始化SCSI_WMILIB_CONTEXT结构的指针,将 MinorFunction 设置为 Srb-WmiSubFunction>。 如果 MinorFunction 指示执行方法的请求,则 SCSI 端口驱动程序会调用微型端口驱动程序的 HwScsiWmiExecuteMethod 例程。

如果微型端口驱动程序未实现 HwScsiWmiExecuteMethod 例程,则必须在微型端口驱动程序传递到 ScsiPortWmiDispatchFunction SCSI_WMILIB_CONTEXT将 ExecuteWmiMethod 设置为 NULL。 在这种情况下,端口驱动程序会将SRB_STATUS_ERROR返回给调用方。

如果 方法生成输出,则微型端口驱动程序应先检查 OutBufferSize 中输出缓冲区的大小,然后再执行任何可能有副作用或不应执行两次的操作。 例如,如果方法返回一组计数器的值,然后重置计数器,则微型端口驱动程序应在重置计数器之前检查缓冲区大小。 这可确保端口驱动程序可以使用较大的缓冲区安全地重新发送请求。 如果缓冲区太小,微型端口驱动程序应使用SRB_STATUS_DATA_OVERRUN调用 ScsiPortWmiPostProcess 以及满足请求所需的输出缓冲区大小。

微型端口驱动程序执行 方法并将输出(如果有)写入缓冲区。 在从 HwScsiWmiExecuteMethod 返回之前,微型端口驱动程序使用适当的 SrbStatus 值和输出缓冲区中使用的字节数调用 ScsiPortWmiPostProcess

要求

要求
目标平台 桌面
标头 scsiwmi.h (包括 Scsiwmi.h)

另请参阅

SCSIWMI_REQUEST_CONTEXT

SCSI_WMILIB_CONTEXT

ScsiPortWmiDispatchFunction

ScsiPortWmiPostProcess