PSCSIWMI_EXECUTE_METHOD回调函数 (scsiwmi.h)
调用微型端口驱动程序的 HwScsiWmiExecuteMethod 例程来执行与数据块关联的方法。 此例程是可选的。
语法
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
将数据块的索引指定到SCSI_WMILIB_CONTEXT结构中传递给 ScsiPortWmiDispatchFunction的 GUID 列表中。
[in] InstanceIndex
如果由 GuidIn dex 指定的块具有多个实例,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,其中 函数 成员设置为SRB_FUNCTION_WMI时,它将调用 ScsiPortWmiDispatchFunction,其指针指向初始化的SCSI_WMILIB_CONTEXT结构,MinorFunction 设置为 Srb->WmiSubFunction。 如果 MinorFunction 指示执行方法的请求,SCSI 端口驱动程序调用微型端口驱动程序的 HwScsiWmiExecuteMethod 例程。
如果微型端口驱动程序未实现 HwScsiWmiExecuteMethod 例程,则必须在微型端口驱动程序传递给 ScsiPortWmiDispatchFunction中将 executeWmiMethod 设置为 NULL SCSI_WMILIB_CONTEXT。 在这种情况下,端口驱动程序将SRB_STATUS_ERROR返回到调用方。
如果该方法生成输出,微型端口驱动程序应先检查输出缓冲区的大小,OutBufferSize,然后再执行任何可能具有副作用或不应执行两次的作。 例如,如果某个方法返回一组计数器的值,然后重置计数器,微型端口驱动程序应在重置计数器之前检查缓冲区大小。 这可确保端口驱动程序可以使用更大的缓冲区安全地重新发送请求。 如果缓冲区太小,微型端口驱动程序应调用 ScsiPortWmiPostProcess,其中包含SRB_STATUS_DATA_OVERRUN和满足请求所需的输出缓冲区的大小。
微型端口驱动程序执行该方法并将输出(如果有)写入缓冲区。 在从 HwScsiWmiExecuteMethod返回之前,微型端口驱动程序使用适当的 SrbStatus 值和输出缓冲区中使用的字节数调用 ScsiPortWmiPostProcess。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | scsiwmi.h (包括 Scsiwmi.h) |