次の方法で共有


WdfInterruptQueueDpcForIsr 関数 (wdfinterrupt.h)

[KMDF と UMDF に適用]

WdfInterruptQueueDpcForIsr メソッドは、フレームワーク割り込みオブジェクトの EvtInterruptDpc コールバック関数をキューに入れ、実行します。

構文

BOOLEAN WdfInterruptQueueDpcForIsr(
  [in] WDFINTERRUPT Interrupt
);

パラメーター

[in] Interrupt

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

戻り値

WdfInterruptQueueDpcForIsr は、割り込みオブジェクトの EvtInterruptDpc コールバック関数を正常にキューに入れた場合に TRUE を返します。 コールバック関数が以前にキューに登録されていて、実行されていない場合、メソッドは FALSE を 返します。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

注釈

ドライバーは通常、EvtInterruptIsr コールバック関数内から WdfInterruptQueueDpcForIsr を呼び出します。

割り込みオブジェクトの EvtInterruptDpc コールバック関数は、実行前に 1 回だけキューに入れられます。 したがって、WdfInterruptQueueDpcForIsr の呼び出しが成功した場合、フレームワークが EvtInterruptDpc コールバック関数をデキューするまで、後続の呼び出しは FALSE を返します。

EvtInterruptDpc コールバックは、エンキューしたプロセッサで実行されます。 EvtInterruptDpc コールバック関数が既にデキューまたは実行されている間にドライバーが WdfInterruptQueueDpcForIsr を呼び出して別の DPC をキューに入れる場合、最初のコールバックが完了する前に 2 番目の EvtInterruptDpc コールバックが実行される場合もあります。

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

KMDF 1.11 以降では、ドライバーはパッシブ レベルの ISR から WdfInterruptQueueDpcForIsr を呼び出すことができます。 ドライバーは作業項目または DPC を登録できますが、両方を登録することはできません。

次のコード例は、 EvtInterruptIsr コールバック関数が EvtInterruptDpc コールバック関数をキューに入れる方法を示しています。

BOOLEAN
MyEvtInterruptIsr(
    IN WDFINTERRUPT Interrupt,
    IN ULONG  MessageID
    )
{
    BOOLEAN queueDpcSuccess;

    //
    // Save interrupt information for the
    // EvtInterruptDpc function.
    //
...
    //
    // Queue the EvtInterruptDpc function.
    //
    queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfinterrupt.h (Wdf.h を含む)
Library Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL <=DIRQL
DDI コンプライアンス規則 DriverCreate(kmdf)

こちらもご覧ください

EvtInterruptDpc

EvtInterruptIsr

WdfInterruptCreate