次の方法で共有


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

HwStorDpcRoutine ルーチンは、遅延プロシージャ 呼び出し (DPC) メカニズムによって DISPATCH IRQL で実行するために遅延されるルーチンです。

構文

HW_DPC_ROUTINE HwDpcRoutine;

void HwDpcRoutine(
  PSTOR_DPC Dpc,
  PVOID HwDeviceExtension,
  PVOID SystemArgument1,
  PVOID SystemArgument2
)
{...}

パラメーター

Dpc

Storport DPC コンテキストへのポインター。

HwDeviceExtension

アダプターごとのデバイス拡張機能へのポインター。

SystemArgument1

呼び出し元から提供された情報へのポインター。

SystemArgument2

呼び出し元から提供された情報へのポインター。

戻り値

なし

解説

ミニポート ドライバーが StorPortInitializeDpc を呼び出して DPC を初期化する場合は 、HwStorDpcRoutine ルーチンへのポインターを使用して 、StorPortInitializeDpc ルーチンの HwDpcRoutine パラメーターを読み込む必要があります。

DPC ルーチンの特定のインスタンスは、DPC ルーチンの他のインスタンスと同期することが保証されます。 DPC ルーチンは、StorPortAcquireSpinLock の呼び出しで適切なスピン ロックを取得することで、HwStorStartIo ルーチンまたは HwStorInterrupt ルーチンと同期できます。 DPC ルーチン内のスピン ロックの管理の詳細については、「 StorPortIssueDpc」を参照してください。

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

typedef
BOOLEAN
HW_DPC_ROUTINE (
  _In_  PSTOR_DPC Dpc,
  _In_  PVOID HwDeviceExtension,
  _In_opt_  PVOID SystemArgument1,
  _In_opt_  PVOID SystemArgument2
  );

ポート ドライバーは、DISPATCH IRQL で HwStorDpcRoutine ルーチンを呼び出します。

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

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

HW_DPC_ROUTINE MyHwDpcRoutine;

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

_Use_decl_annotations_
BOOLEAN
MyHwDpcRoutine (
  _In_  PSTOR_DPC Dpc,
  _In_  PVOID HwDeviceExtension,
  _In_opt_  PVOID SystemArgument1,
  _In_opt_  PVOID SystemArgument2
  );
  {
      ...
  }

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

要件

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

こちらもご覧ください

ミニポート ドライバーがを呼び出して DPC を初期化する場合は 、HwStorDpcRoutine ルーチンへのポインターを使用して 、StorPortInitializeDpc ルーチンの HwDpcRoutine パラメーターを読み込む必要があります。

DPC ルーチンの特定のインスタンスは、DPC ルーチンの他のインスタンスと同期することが保証されます。 DPC ルーチンは、 を呼び出して適切なスピン ロックを取得することで、それ自体をルーチンまたはルーチンと同期できます。 DPC ルーチン内のスピン ロックの管理の詳細については、「」を参照してください。

HwStorInterrupt

HwStorStartIo

StorPortAcquireSpinLock

StorPortInitializeDpc

StorPortIssueDpc