次の方法で共有


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-terminated 文字列を提供します。

[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の詳細については、「関数の動作に注釈を付ける」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー storport.h (Storport.h を含む)
IRQL PASSIVE_LEVEL (「解説」セクションを参照)。

関連項目

HwStorInitialize

PORT_CONFIGURATION_INFORMATION

StorPortInitialize

StorPortLogError