ScsiPortWmiSetData 関数 (scsiwmi.h)
ScsiPortWmiSetData ルーチンは、要求コンテキスト内のWNODE_ALL_DATA構造体を更新して、インスタンスのデータの位置と長さを指定します。
構文
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 つあります。
ScsiPortWmiSetData
ミニポート ドライバーは最初に ScsiPortWmiSetInstanceCount を 呼び出す必要がありますが、 ScsiPortWmiSetInstanceCount が呼び出された後、ミニドライバーが ScsiPortWmiSetData と ScsiPortWmiSetInstanceName を呼び出す順序は関係ありません。 ScsiPortWmiSetData または ScsiPortWmiSetInstanceName を呼び出す場合、BufferAvail パラメーターでルーチンに渡される値は、最後に呼び出された SCSI ポート WMI ルーチンによって BufferAvail パラメーターで返される値と同じである必要があります。 たとえば、ミニドライバーが 最初に ScsiPortWmiSetInstanceCount を 呼び出し、このルーチンは BufferAvail パラメーターで 1,000 の値を返したとします。 次に、ミニドライバーは ScsiPortWmiSetData を呼び出し、 BufferAvail パラメーターで値 500 を返します。 最後に、ミニドライバーは ScsiPortWmiSetInstanceName を 呼び出し、 BufferAvail パラメーターで 200 の値を返します。 初期値 1,000 を BufferAvail の ScsiPortWmiSetData に渡し、値 500 を ScsiPortWmiSetInstanceName に渡す必要があります。
DataLength バイトサイズの新しいインスタンス データを追加するのに十分なメモリがない場合は、BufferAvail メンバーに 0 が返されます。
[in, out] SizeNeeded
入力時に、InstanceIndex で指定されたインスタンスの説明データを追加する前に、WNODE 全体を記述するために必要なバイト数を示します。 返されると、このメンバーには、新しいインスタンスのデータを含む WNODE のサイズが含まれます。
戻り値
ScsiPortWmiSetData ルーチンは、呼び出し元が InstanceIndex によって識別されるインスタンスに関する説明情報を格納できるバッファーへのポインターを返します。 ScsiPortWmiSetData がインスタンス データに十分なメモリを割り当てることができない場合、または要求コンテキストに含まれる WNODE の型がWNODE_ALL_DATAでない場合、ScsiPortWmiSetData は NULL を返します。
注釈
ミニドライバーは 、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 を含む) |