次の方法で共有


HW_RESET_BUS コールバック関数 (storport.h)

HwStorResetBus ルーチンは、エラー状態をクリアするためにポート ドライバーによって呼び出されます。

構文

HW_RESET_BUS HwResetBus;

BOOLEAN HwResetBus(
  PVOID DeviceExtension,
  ULONG PathId
)
{...}

パラメーター

DeviceExtension

HBA 記憶域ごとのミニポート ドライバーへのポインター。

PathId

リセットする SCSI バスを識別します。

戻り値

バスが正常にリセットされると、 HwStorResetBus はTRUE を返します。

注釈

HwStorResetBus という名前は、単なるプレースホルダーです。 このルーチンの実際のプロトタイプは、 Storport.h で次のように定義されています。

typedef
BOOLEAN
HW_RESET_BUS (
  _In_ PVOID  DeviceExtension,
  _In ULONG  PathId
  );

ポート ドライバーは、アダプターのすべてのデバイス IO キューを一時停止し、StartIo スピン ロックを取得した後、IRQL DISPATCH_LEVELで HwStorResetBus ルーチンを呼び出します。 ミニポート ドライバーは、このルーチン中に PathIdHwStorStartIo によって受信された SRB を完了し、必要に応じてその状態をSRB_STATUS_BUS_RESETに設定します。

StartIo スピン ロックが取得され、 その後 HwStorResetBus が返された後に解放されるだけでなく、ミニポートがPERF_CONFIGURATION_DATAを介して複数のチャネルサポートを要求した場合、すべてのチャネル トークンが取得され、コールバックの戻り時に解放されます。 これにより、リセット バス フェーズ中に IO が HwStorStartIo にディスパッチされなくなります。

HwStorResetBus コールバック関数を定義するには、まず、定義するコールバック関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数型のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、 ドライバーのコード分析静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、MyHwResetBus という名前の HwStorResetBus コールバック ルーチンを定義するには、次のコード例に示すように、HW_RESET_BUS型を使用します。

HW_RESET_BUS MyHwResetBus;

次に、コールバック ルーチンを次のように実装します。

_Use_decl_annotations_
BOOLEAN
MyHwResetBus (
  _In_ PVOID  DeviceExtension,
  _In_ ULONG  PahtId
  );
  {
      ...
  }

HW_RESET_BUS関数の種類は、Storport.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のHW_RESET_BUS関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 Storport ドライバーの関数ロール型を使用した関数の宣言」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header storport.h (Storport.h を含む)
IRQL DISPATCH_LEVEL (「解説」セクションを参照)。