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
ミニポート ドライバーが ScsiPortWmiDispatchFunction に渡したSCSI_WMILIB_CONTEXT構造内の GUID の一覧へのインデックスによってデータ ブロックを指定します。
[in] InstanceIndex
GuidIndex で指定されたブロックに複数のインスタンスがある場合、InstanceIndex は インスタンスを指定します。
[in] MethodId
実行するメソッドの ID を指定します。 ミニポート ドライバーは、データ ブロック内の項目としてメソッド ID を定義します。
[in] InBufferSize
入力データのサイズをバイト単位で示します。 入力データがない場合、 InBufferSize は 0 です。
[in] OutBufferSize
出力データのバッファーで使用できるバイト数を示します。
[in, out] Buffer
入力データを保持し、 メソッドから出力データ (存在する場合) を受け取るバッファーを指します。 バッファーが小さすぎてすべての出力を受け取れなくなった場合、ミニポート ドライバーは、SRB_STATUS_DATA_OVERRUNと必要なサイズで ScsiPortWmiPostProcess を 呼び出します。
戻り値
HwScsiWmiExecuteMethod は、要求が保留中の場合はSRB_STATUS_PENDINGを返し、要求が完了した場合は 0 以外の SRB 状態値を返します。 このルーチンによって返される SRB 状態値は、 ScsiPortWmiPostProcess に渡されたものと同じです。 戻り値のデータ型は BOOLEAN ですが、 HwScsiWmiExecuteMethod ルーチンは実際には SRB 状態値を返します。
注釈
ミニポート ドライバーは、Function メンバーがSRB_FUNCTION_WMIに設定されている SRB を受信すると、初期化されたSCSI_WMILIB_CONTEXT構造体へのポインターを使用して ScsiPortWmiDispatchFunction を呼び出し、MinorFunction を Srb-WmiSubFunction> に設定します。 MinorFunction がメソッドの実行要求を示している場合、SCSI ポート ドライバーはミニポート ドライバーの HwScsiWmiExecuteMethod ルーチンを呼び出します。
ミニポート ドライバーが HwScsiWmiExecuteMethod ルーチンを実装していない場合は、ミニポート ドライバーが ScsiPortWmiDispatchFunction に渡すSCSI_WMILIB_CONTEXTで ExecuteWmiMethodを NULL に設定する必要があります。 この場合、ポート ドライバーは呼び出し元にSRB_STATUS_ERRORを返します。
メソッドが出力を生成する場合、ミニポート ドライバーは、副作用が発生する可能性がある操作を実行する前に、出力バッファーのサイズを OutBufferSize にチェックする必要があります。 たとえば、メソッドがカウンターのグループの値を返し、カウンターをリセットした場合、ミニポート ドライバーは、カウンターをリセットする前にバッファー サイズをチェックする必要があります。 これにより、ポート ドライバーは、より大きなバッファーで要求を安全に再送信できます。 バッファーが小さすぎる場合、ミニポート ドライバーは、SRB_STATUS_DATA_OVERRUNと要求を満たすために必要な出力バッファーのサイズを使用して ScsiPortWmiPostProcess を呼び出す必要があります。
ミニポート ドライバーは メソッドを実行し、出力がある場合はバッファーに書き込みます。 HwScsiWmiExecuteMethod から返される前に、ミニポート ドライバーは、適切な SrbStatus 値と出力バッファーで使用されるバイト数を使用して ScsiPortWmiPostProcess を呼び出します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | scsiwmi.h (Scsiwmi.h を含む) |