ScsiPortWmiSetData 函数 (scsiwmi.h)

ScsiPortWmiSetData 例程更新请求上下文中的WNODE_ALL_DATA结构,以指定实例的数据位置和长度。

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

语法

PVOID ScsiPortWmiSetData(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    DataLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

参数

[in] RequestContext

指向类型 为 SCSIWMI_REQUEST_CONTEXT 的结构的指针,该结构包含 WMI SRB 的请求上下文。

[in] InstanceIndex

包含一个索引,指示要为其指定实例数据位置和长度的实例。

[in] DataLength

指定描述实例所需的数据字节数。

[out] BufferAvail

输入时,必须包含 WNODE_ALL_DATA 结构中可用于描述实例名称和数据的缓冲区空间字节数。 返回时,此成员包含剩余的缓冲区空间的字节数。

有三个 SCSI 端口 WMI 例程在其 BufferAvail 参数中返回可用缓冲区大小的值:

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

微型端口驱动程序必须首先调用 ScsiPortWmiSetInstanceCount ,但在调用 ScsiPortWmiSetInstanceCount 之后,微型驱动程序调用 ScsiPortWmiSetDataScsiPortWmiSetInstanceName 的顺序并不重要。 调用 ScsiPortWmiSetDataScsiPortWmiSetInstanceName 时,传递到其 BufferAvail 参数中的例程的值必须与最近调用的 SCSI 端口 WMI 例程在 BufferAvail 参数中返回的值相同。 例如,假设微型驱动程序首先调用 ScsiPortWmiSetInstanceCount ,并且此例程在其 BufferAvail 参数中返回值 1,000。 接下来,微型驱动程序调用 ScsiPortWmiSetData ,该数据在其 BufferAvail 参数中返回值 500。 最后,微型驱动程序调用 ScsiPortWmiSetInstanceName ,该名称在其 BufferAvail 参数中返回值 200。 初始值 1,000 必须传递到 BufferAvail 中的 ScsiPortWmiSetData,并且值 500 必须传递到 ScsiPortWmiSetInstanceName

如果没有足够的内存可用于添加大小 为 DataLength 字节的新实例数据则会在 BufferAvail 成员中返回零。

[in, out] SizeNeeded

在输入时,指示在为 InstanceIndex 指定的实例添加描述性数据之前描述整个 WNODE 所需的字节数。 返回时,此成员将包含 WNODE 的大小,包括新实例的数据。

返回值

ScsiPortWmiSetData 例程返回指向缓冲区的指针,调用方可在其中存储有关 InstanceIndex 标识的实例的描述性信息。 如果 ScsiPortWmiSetData 无法为实例数据分配足够的内存,或者请求上下文中包含的 WNODE 不是 WNODE_ALL_DATA 类型, 则 ScsiPortWmiSetData 返回 NULL

注解

微型驱动程序在调用 ScsiPortWmiSetData 之前,必须调用 ScsiPortWmiSetInstanceCount

参数 RequestContext 指向请求上下文结构 (SCSIWMI_REQUEST_CONTEXT),该结构包含与 Windows Management Instrumentation (WMI) SCSI 请求块 (SRB) 关联的信息。 请求上下文结构又包含 WMI 系统 用来在用户模式数据使用者和内核模式数据提供程序(如驱动程序)之间传递数据的 WMI WNODE_XXX 结构之一。

ScsiPortWmiSetData 例程要求请求上下文中定义的 WNODE 结构的类型为 WNODE_ALL_DATA。 这是因为 ScsiPortWmiSetData 可以为与 WMI 数据块关联的任何实例指定数据缓冲区的位置和长度。 与包含单个实例相关信息的 WNODE_SINGLE_INSTANCE 结构不同,WNODE_ALL_DATA 结构包含指向多个实例缓冲区区域的指针数组, ScsiPortWmiSetData 使用 InstanceIndex 参数作为此数组的索引来初始化特定实例的相应数组元素。 初始化后,每个数组元素都包含实例的缓冲区区域的大小和位置。

在微型端口驱动程序调用 ScsiPortWmiPostProcess 并且 ScsiPortWmiPostProcess 返回最终 SRB 状态和缓冲区大小之前,为请求上下文分配的内存必须保持有效。 如果 SRB 可以笔,则应从 SRB 扩展分配请求上下文的内存。 如果 SRB 无法笔画,则可以从不超出范围的堆栈帧分配内存。

要求

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

另请参阅

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE