次の方法で共有


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

WMI SRB の要求コンテキスト 含むSCSIWMI_REQUEST_CONTEXT型の構造体へのポインター。

[in] InstanceIndex

インスタンス データの位置と長さを指定するインスタンスを示すインデックスが含まれます。

[in] DataLength

インスタンスを記述するために必要なデータのバイト数を指定します。

[out] BufferAvail

入力時に、インスタンス名とデータを記述するために使用できる WNODE_ALL_DATA 構造体内のバッファー領域のバイト数を含める必要があります。 戻り値の場合、このメンバーには残っているバッファー・スペースのバイト数が含まれます。

BufferAvail パラメーターで使用可能なバッファー サイズの値を返す SCSI ポート WMI ルーチンは 3 つあります。

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

ミニポート ドライバーは最初に ScsiPortWmiSetInstanceCount を 呼び出す必要がありますが、 ScsiPortWmiSetInstanceCount が呼び出された後、ミニドライバーが ScsiPortWmiSetDataScsiPortWmiSetInstanceName を呼び出す順序は関係ありません。 ScsiPortWmiSetData または ScsiPortWmiSetInstanceName を呼び出す場合、BufferAvail パラメーターでルーチンに渡される値は、最後に呼び出された SCSI ポート WMI ルーチンによって BufferAvail パラメーターで返される値と同じである必要があります。 たとえば、ミニドライバーが 最初に ScsiPortWmiSetInstanceCount を 呼び出し、このルーチンは BufferAvail パラメーターで 1,000 の値を返したとします。 次に、ミニドライバーは ScsiPortWmiSetData を呼び出し、 BufferAvail パラメーターで値 500 を返します。 最後に、ミニドライバーは ScsiPortWmiSetInstanceName を 呼び出し、 BufferAvail パラメーターで 200 の値を返します。 初期値 1,000 を BufferAvailScsiPortWmiSetData に渡し、値 500 を ScsiPortWmiSetInstanceName に渡す必要があります。

DataLength バイトサイズの新しいインスタンス データを追加するのに十分なメモリがない場合は、BufferAvail メンバーに 0 が返されます。

[in, out] SizeNeeded

入力時に、InstanceIndex で指定されたインスタンスの説明データを追加する前に、WNODE 全体を記述するために必要なバイト数を示します。 返されると、このメンバーには、新しいインスタンスのデータを含む WNODE のサイズが含まれます。

戻り値

ScsiPortWmiSetData ルーチンは、呼び出し元が InstanceIndex によって識別されるインスタンスに関する説明情報を格納できるバッファーへのポインターを返します。 ScsiPortWmiSetData がインスタンス データに十分なメモリを割り当てることができない場合、または要求コンテキストに含まれる WNODE の型がWNODE_ALL_DATAでない場合、ScsiPortWmiSetDataNULL を返します。

注釈

ミニドライバーは 、ScsiPortWmiSetData を 呼び出す前に ScsiPortWmiSetInstanceCount を呼び出す必要があります。

パラメーター RequestContext は、Windows Management Instrumentation (WMI) SCSI 要求ブロック (SRB) に関連付けられた情報を含む要求コンテキスト構造 (SCSIWMI_REQUEST_CONTEXT) を指します。 要求コンテキスト構造には、ユーザー モードのデータ コンシューマーとカーネル モードのデータ プロバイダー (ドライバーなど) の間でデータを渡すために WMI システムによって使用される WMI WNODE_XXX 構造体 のいずれかが含まれます。

ScsiPortWmiSetData ルーチンでは、要求コンテキスト内で定義されている WNODE 構造体が WNODE_ALL_DATA 型である必要があります。 これは、 ScsiPortWmiSetData では、WMI データ ブロックに関連付けられている任意のインスタンスのデータ バッファーの場所と長さを指定できるためです。 1 つのインスタンスに関する情報を含む WNODE_SINGLE_INSTANCE 構造体とは異なり、WNODE_ALL_DATA 構造体には複数のインスタンスのバッファー領域へのポインターの配列が含まれています。 ScsiPortWmiSetData は、この配列のインデックスとして InstanceIndex パラメーターを使用して、特定のインスタンスの適切な配列要素を初期化します。 初期化された各配列要素には、インスタンスのバッファー領域のサイズと場所が含まれます。

要求コンテキストに割り当てられたメモリは、ミニポート ドライバーが ScsiPortWmiPostProcess を呼び出し、 ScsiPortWmiPostProcess が最終的な SRB 状態とバッファー サイズを返すまで有効なままである必要があります。 SRB をペンドできる場合は、要求コンテキストのメモリを SRB 拡張機能から割り当てる必要があります。 SRB がペンドできない場合は、スコープ外に出ないスタック フレームからメモリを割り当てることができます。

要件

要件
対象プラットフォーム デスクトップ
Header scsiwmi.h (Miniport.h、Scsi.h を含む)

こちらもご覧ください

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE