WdfInterruptQueueDpcForIsr 函式 (wdfinterrupt.h)
[適用於 KMDF 和 UMDF]
WdfInterruptQueueDpcForIsr 方法會將架構中斷物件的 EvtInterruptDpc 回呼函式排入佇列,以供執行。
語法
BOOLEAN WdfInterruptQueueDpcForIsr(
[in] WDFINTERRUPT Interrupt
);
參數
[in] Interrupt
架構中斷物件的句柄。
傳回值
如果 WdfInterruptQueueDpcForIsr 成功將中斷物件的 EvtInterruptDpc 回呼函式排入佇列,則會傳回 TRUE。 如果回呼函式先前已排入佇列且尚未執行,則方法會傳回 FALSE 。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
驅動程式通常會從 EvtInterruptIsr 回呼函式內呼叫 WdfInterruptQueueDpcForIsr。
中斷物件的 EvtInterruptDpc 回呼函式只能在其執行之前排入佇列一次。 因此,如果 呼叫 WdfInterruptQueueDpcForIsr 成功,後續呼叫會傳回 FALSE ,直到架構將 EvtInterruptDpc 回呼函式取消佇列為止。
EvtInterruptDpc 回呼會在加入佇列的處理器上執行。 如果您的驅動程式呼叫 WdfInterruptQueueDpcForIsr 來將另一個 DPC 排入佇列,而 EvtInterruptDpc 回呼函式已經清除佇列或執行,則第二個 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);
...
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最低 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfinterrupt.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | <=DIRQL |
DDI 合規性規則 | DriverCreate (kmdf) |