EVT_WDF_INTERRUPT_DPC コールバック関数 (wdfinterrupt.h)
[KMDF と UMDF に適用]
ドライバーの EvtInterruptDpc イベント コールバック関数は、ドライバーの EvtInterruptIsr コールバック関数が格納した割り込み情報を処理します。
構文
EVT_WDF_INTERRUPT_DPC EvtWdfInterruptDpc;
void EvtWdfInterruptDpc(
[in] WDFINTERRUPT Interrupt,
[in] WDFOBJECT AssociatedObject
)
{...}
パラメーター
[in] Interrupt
フレームワーク割り込みオブジェクトへのハンドル。
[in] AssociatedObject
ドライバーが WdfInterruptCreate に渡したフレームワーク デバイス オブジェクトへのハンドル。
戻り値
なし
解説
EvtInterruptDpc コールバック関数を登録するには、ドライバーが WdfInterruptCreate を呼び出す前に、コールバック関数のアドレスをWDF_INTERRUPT_CONFIG構造体に配置する必要があります。
ドライバーは通常、EvtInterruptDpc コールバック関数で I/O 要求を完了します。
EvtInterruptDpc コールバック関数は、DISPATCH_LEVELで実行され、ページング可能なコードにアクセスすることはできません。 EvtInterruptDpc コールバック関数が IRQL = PASSIVE_LEVELで操作を実行する必要がある場合は、フレームワーク作業項目を使用できます。
KMDF バージョン 1.11 以降では、ドライバーは パッシブ レベルの割り込みを サポートし、 EvtInterruptWorkItem または EvtInterruptDpc コールバック関数を提供できます。 ドライバーがパッシブ レベルの割り込みをサポートし、 EvtInterruptDpc コールバック関数を提供する場合、ドライバーはコールバック内からパッシブ レベルの割り込みロックを取得できません。
ほとんどのドライバーは、割り込みの種類ごとに 1 つの EvtInterruptDpc コールバック関数を使用します。 ドライバーがデバイスごとに複数の フレームワーク キュー オブジェクト を作成する場合は、キューごとに個別の DPC オブジェクト と EvtDpcFunc コールバック関数を使用することを検討してください。
EvtInterruptDpc コールバック関数の実行をスケジュールするには、ドライバーは EvtInterruptIsr コールバック関数内から WdfInterruptQueueDpcForIsr を呼び出す必要があります。
ドライバーが EvtInterruptDpc コールバック関数の実行をスケジュールすると、システムは、システムの DPC キューに DPC オブジェクトを追加します。 システムが優先度の高いタスクを実行していない場合は、キューから オブジェクトを削除し、 EvtInterruptDpc コールバック関数を呼び出します。
オブジェクトが既にキューに入っている場合、システムは DPC オブジェクトを DPC キューに追加しません。 システムが EvtInterruptDpc コールバック関数を呼び出す前に、EvtInterruptIsr コールバック関数が複数回呼び出されることがあります。 したがって、 EvtInterruptDpc コールバック関数は、いくつかの割り込みからの情報を処理できる必要があり、最後に呼び出されてから発生したすべての割り込みを処理する必要があります。
通常、ドライバーの EvtInterruptDpc コールバック関数の実行を他のコールバック関数の実行と同期する必要があります。 詳細については、「 割り込みコードの同期」を参照してください。
フレームワーク ベースのドライバーでの割り込みの処理の詳細については、「 ハードウェア割り込みの処理」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdfinterrupt.h (Wdf.h を含む) |
IRQL | 「解説」を参照してください。 |