次の方法で共有


ScsiPortWmiSetInstanceName 関数 (scsiwmi.h)

ScsiPortWmiSetInstanceName ルーチンは、要求コンテキスト内のWNODE_ALL_DATA構造体を更新して、インスタンス名の位置と長さを指定します。

メモ SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更または使用できない可能性があります。 代わりに、 Storport ドライバーStorport ミニポート ドライバー モデルを使用することをお勧めします。
 

構文

PWCHAR ScsiPortWmiSetInstanceName(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    InstanceNameLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

パラメーター

[in] RequestContext

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

[in] InstanceIndex

インスタンス名の位置と長さを指定するインスタンスを示すインデックスを格納します。

[in] InstanceNameLength

インスタンス名のサイズをバイト単位で指定します。

[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 の値を返したとします。 次に、ミニドライバーは、BufferAvail パラメーターで 500 の値を返す ScsiPortWmiSetData を呼び出します。 最後に、ミニドライバーは、BufferAvail パラメーターで 200 の値を返す ScsiPortWmiSetInstanceName を呼び出します。 初期値 1,000 を BufferAvailの ScsiPortWmiSetData に渡し、値 500 を ScsiPortWmiSetInstanceName に渡す必要があります。

長さ InstanceNameLength のインスタンス名を追加するのに十分なメモリがない場合は、 BufferAvail メンバーに 0 が返されます。

[in, out] SizeNeeded

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

戻り値

ScsiPortWmiSetInstanceCount ルーチンは、呼び出し元が InstanceIndex で指定されたインスタンスの名前を格納できるバッファーへのポインターを返します。 ScsiPortWmiSetInstanceCount がインスタンス名に十分なメモリを割り当てることができない場合、または要求コンテキストに含まれる WNODE の型がWNODE_ALL_DATAでない場合、ScsiPortWmiSetDataNULL を返します。

注釈

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

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

ScsiPortWmiSetInstanceName ルーチンでは、要求コンテキスト内で定義されている WNODE 構造体がWNODE_ALL_DATA型である必要があります。 これは、 ScsiPortWmiSetInstanceName が WMI データ ブロックに関連付けられているインスタンスのインスタンス名領域を確保できるためです。 1 つのインスタンスに関する情報を含む WNODE_SINGLE_INSTANCE 構造体とは異なり、WNODE_ALL_DATA構造体には、さまざまなインスタンスのバッファー領域へのポインターの配列が含まれており、 ScsiPortWmiSetInstanceCount はこの配列を初期化して、インスタンス データの各バッファーに個別にアクセスできるようにします。

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

要件

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

こちらもご覧ください

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE