次の方法で共有


EVT_WDF_INTERRUPT_WORKITEM コールバック関数 (wdfinterrupt.h)

[KMDF と UMDF に適用]

ドライバーの EvtInterruptWorkItem イベント コールバック関数は、ドライバーの EvtInterruptIsr コールバック関数が格納した割り込み情報を処理します。

構文

EVT_WDF_INTERRUPT_WORKITEM EvtWdfInterruptWorkitem;

void EvtWdfInterruptWorkitem(
  [in] WDFINTERRUPT Interrupt,
  [in] WDFOBJECT AssociatedObject
)
{...}

パラメーター

[in] Interrupt

フレームワーク割り込みオブジェクトへのハンドル。

[in] AssociatedObject

ドライバーが WdfInterruptCreate に渡したフレームワーク デバイス オブジェクトへのハンドル。

戻り値

なし

解説

EvtInterruptWorkItem コールバック関数は IRQL = PASSIVE_LEVELで実行されます。

EvtInterruptWorkItem コールバック関数を登録するには、WdfInterruptCreate を呼び出す前に、ドライバーがコールバック関数のアドレスをWDF_INTERRUPT_CONFIG構造体に配置する必要があります。

ほとんどのドライバーは、割り込みの種類ごとに 1 つの EvtInterruptWorkItem コールバック関数を使用します。

EvtInterruptWorkItem コールバック関数の実行をスケジュールするには、ドライバーは EvtInterruptIsr コールバック関数内から WdfInterruptQueueWorkItemForIsr を呼び出す必要があります。

ドライバーがデバイスごとに複数のフレームワーク割り込みオブジェクトを作成する場合は、割り込みごとに個別 の EvtInterruptWorkItem コールバックを使用することを検討してください。

DIRQL 割り込み処理またはパッシブ レベルの割り込み処理を実装するドライバーは、 EvtInterruptWorkItem コールバックをキューに登録できます。

ドライバーは、 EvtInterruptDpc コールバックと EvtInterruptWorkItem コールバックの両方をキューに入れることはできません。

ドライバーが割り込みのWDF_INTERRUPT_CONFIG構造で AutomaticSerialization メンバーを TRUE に設定している場合、フレームワークは割り込みオブジェクトの EvtInterruptWorkItem コールバック関数の実行を、割り込みの親オブジェクトの下にある他のオブジェクトからのコールバック関数と同期します。 コールバック同期ロックの詳細については、「フレームワーク ロックの 使用」を参照してください。

一般に、ドライバーが EvtInterruptWorkItem 内から割り込みオブジェクトのパッシブ ロックを取得する必要がある場合、ドライバーはWDF_INTERRUPT_CONFIGAutomaticSerialization メンバーを FALSE に設定し、EvtInterruptWorkItem 内から WdfInterruptAcquireLock を呼び出す必要があります。

AutomaticSerialization が TRUE に設定されている場合、ドライバーの EvtInterruptWorkItem コールバック関数は次のメソッドを呼び出さないでください。

WdfInterruptAcquireLockWdfInterruptSynchronizeWdfInterruptDisableWdfInterruptEnable フレームワーク ベースのドライバーでの割り込みの処理の詳細については、「 ハードウェア割り込みの処理」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.11
最小 UMDF バージョン 2.0
Header wdfinterrupt.h (Wdf.h を含む)
IRQL PASSIVE_LEVEL