HW_FIND_ADAPTER コールバック関数 (storport.h)
HwStorFindAdapter ルーチンは、指定された構成を使用して、特定の HBA がサポートされているかどうかを判断し、サポートされている場合は、そのアダプターに関する構成情報を返します。
構文
HW_FIND_ADAPTER HwFindAdapter;
ULONG HwFindAdapter(
PVOID DeviceExtension,
[in] PVOID HwContext,
[in] PVOID BusInformation,
[in] PCHAR ArgumentString,
[in/out] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
[in] PBOOLEAN Reserved3
)
{...}
パラメーター
DeviceExtension
アダプターごとの記憶域を提供します。
[in] HwContext
NULL に設定されている。
[in] BusInformation
NULL に設定されている。
[in] ArgumentString
ドライバーに関するコンテキスト情報を含む NULL で終わる文字列を提供します。
[in/out] ConfigInfo
初期化中にミニポート ドライバーが使用する初期化 されたPORT_CONFIGURATION_INFORMATION 構造体を提供します。
[in] Reserved3
システムで使用するために予約されています。
戻り値
HwStorFindAdapter は、次のいずれかの状態値を返す必要があります。
リターン コード | 説明 |
---|---|
SP_RETURN_FOUND | サポートされている HBA が見つかり、HBA 関連の構成情報が正常に決定され、 PORT_CONFIGURATION_INFORMATION 構造体に設定されたことを示します。 |
SP_RETURN_ERROR | HBA が見つかったが、構成情報を取得中にエラーが発生したことを示します。 可能であれば、 StorPortLogError でこのようなエラーをログに記録する必要があります。 |
SP_RETURN_BAD_CONFIG | 指定された構成情報がアダプターに対して無効であることを示します。 |
SP_RETURN_NOT_FOUND | 指定された構成情報に対してサポートされている HBA が見つからなかったことを示します。 |
注釈
Storport ドライバーはプラグ アンド プレイ (PnP) デバイスのみをサポートしているため、HwStorFindAdapter への HwContext パラメーターと BusInformation パラメーターは、非仮想ミニポート ドライバーには指定されません。
HwStorFindAdapter では、ConfigInfo 構造体の MaximumTransferLength フィールドと NumberOfPhysicalBreaks フィールドを設定する必要があります。 これらのフィールド以外の PORT_CONFIGURATION_INFORMATION 構造では、アダプターの起動に必要なすべてのアダプター リソースが常に完全に指定されます。
HwStorFindAdapter という名前は、単なるプレースホルダーです。 このルーチンの実際のプロトタイプは、 Storport.h で次のように定義されています。
typedef
ULONG
HW_FIND_ADAPTER (
_In_ PVOID DeviceExtension,
_In_ PVOID HwContext,
_In_ PVOID BusInformation,
_In_z_ PCHAR ArgumentString,
_Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
_In_ PBOOLEAN Reserved3
);
ほとんどの場合、StorPort は、スピン ロックを取得せずに、IRQL == PASSIVE_LEVELで HwStorFindAdapter ルーチンを呼び出します。 例外のケースは、ミニポートが ScsiRestartAdapter コントロールの種類で HwStorAdaptorControl の呼び出しをサポートしていない場合です。 このような場合、StorPort は代わりに HwStorFindAdapter と HwStorInitialize の両方を呼び出してアダプターを再初期化します。 この場合、 HWStorFindAdapter は IRQL == DISPATCH_LEVELで呼び出されます。 また、ダンプ モードの場合、 HWStorFindAdapter は IRQL == HIGH_LEVELで呼び出されます。
例
HwStorFindAdapter コールバック関数を定義するには、まず、定義するコールバック関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。
たとえば、MyHwFindAdapter という名前の HwStorFindAdapter コールバック ルーチンを定義するには、次のコード例に示すように、HW_FIND_ADAPTER型を使用します。
HW_FIND_ADAPTER MyHwFindAdapter;
次に、コールバック ルーチンを次のように実装します。
_Use_decl_annotations_
ULONG
MyHwFindAdapter (
_In_ PVOID DeviceExtension,
_In_ PVOID HwContext,
_In_ PVOID BusInformation,
_In_z_ PCHAR ArgumentString,
_Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
_In_ PBOOLEAN Reserved3
);
{
...
}
HW_FIND_ADAPTER関数型は、Storport.h ヘッダー ファイルで定義されます。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のHW_FIND_ADAPTER関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 Storport ドライバーの関数ロール型を使用した関数の宣言」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | storport.h (Storport.h を含む) |
IRQL | PASSIVE_LEVEL (「解説」セクションを参照)。 |