共用方式為


WDF_INTERRUPT_CONFIG結構 (wdfinterrupt.h)

[適用於 KMDF 和 UMDF]

WDF_INTERRUPT_CONFIG 結構包含裝置中斷的組態資訊。

語法

typedef struct _WDF_INTERRUPT_CONFIG {
  ULONG                           Size;
  WDFSPINLOCK                     SpinLock;
  WDF_TRI_STATE                   ShareVector;
  BOOLEAN                         FloatingSave;
  BOOLEAN                         AutomaticSerialization;
  PFN_WDF_INTERRUPT_ISR           EvtInterruptIsr;
  PFN_WDF_INTERRUPT_DPC           EvtInterruptDpc;
  PFN_WDF_INTERRUPT_ENABLE        EvtInterruptEnable;
  PFN_WDF_INTERRUPT_DISABLE       EvtInterruptDisable;
  PFN_WDF_INTERRUPT_WORKITEM      EvtInterruptWorkItem;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated;
  WDFWAITLOCK                     WaitLock;
  BOOLEAN                         PassiveHandling;
  WDF_TRI_STATE                   ReportInactiveOnPowerDown;
  BOOLEAN                         CanWakeDevice;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;

成員

Size

這個 結構的大小,以位元組為單位。

SpinLock

架構微調鎖定物件的句柄,由先前呼叫 WdfSpinLockCreate NULL所取得。 如果此參數 NULL,則架構會使用內部微調鎖定物件。 架構會在呼叫驅動程式的 EvtInterruptSynchronize 事件回呼函式,以及 驅動程式呼叫 WdfInterruptAcquireLock時,先取得微調鎖定。 針對被動層級中斷處理,請將 設定為 NULL。

從UMDF 2.0版開始,UMDF一律使用被動層級中斷處理。 在此情況下,請將這個成員設定為 NULL。

ShareVector

WDF_TRI_STATE型別值。 如果此值 WdfTrue,則可以共用插斷向量。 如果值 WdfFalse,則無法共用插斷向量。 如果值 WdfDefault,則 PnP 管理員會使用總線驅動程式的值。

FloatingSave

布爾值,如果 TRUE,表示當裝置中斷時,系統會儲存處理器的浮點和 MMX 狀態。 如果 FALSE,則系統不會儲存浮點和 MMX 狀態。 只有當驅動程式 EvtInterruptIsr 回呼函式必須使用浮點或 MMX 快取器時,驅動程式才應將此值設定為 TRUE。 如需儲存浮點和 MMX 狀態的詳細資訊,請參閱在 WDM 驅動程式中使用浮點或 MMX

從UMDF 2.0版開始,會忽略此成員。

AutomaticSerialization

布爾值,如果 TRUE,表示架構會同步執行中斷物件的 EvtInterruptDpcEvtInterruptWorkItem 回呼函式,以及中斷父物件下其他物件的回呼函式。 如需詳細資訊,請參閱下列一節。

EvtInterruptIsr

驅動程式 EvtInterruptIsr 回呼函式的指標。 這個指標不能 NULL

EvtInterruptDpc

驅動程式 EvtInterruptDpc 回呼函式的指標,或 NULL。 驅動程式可以提供 EvtInterruptWorkItemEvtInterruptDpc,但不能同時提供兩者。

EvtInterruptEnable

驅動程式 EvtInterruptEnable 回呼函式的指標,或 NULL

EvtInterruptDisable

驅動程式 EvtInterruptDisable 回呼函式的指標,或 NULL

EvtInterruptWorkItem

驅動程式 EvtInterruptWorkItem 回呼函式的指標,或 NULL。 驅動程式可以提供 EvtInterruptWorkItemEvtInterruptDpc,但不能同時提供兩者。 EvtInterruptWorkItem 成員可在 1.11 版和更新版本的 KMDF 中使用。

InterruptRaw

CM_PARTIAL_RESOURCE_DESCRIPTOR 結構的指標,描述系統指派給中斷 原始資源。 只有在 EvtDevicePrepareHardware 回呼中建立中斷時,才會使用此成員。 InterruptRaw 成員可在 1.11 版和更新版本的 KMDF 中使用。

InterruptTranslated

CM_PARTIAL_RESOURCE_DESCRIPTOR 結構的指標,描述系統指派給中斷 翻譯的資源。 只有在 EvtDevicePrepareHardware 回呼中建立中斷時,才會使用此成員。 InterruptTranslated 成員可在 1.11 版和更新版本的 KMDF 中使用。

WaitLock

架構等候鎖定物件的句柄,由先前呼叫 WdfWaitLockCreate NULL取得。 如果 WaitLock 為非NULLPassiveHandling 必須設定為 TRUE WaitLock 成員可在 1.11 版和更新版本的 KMDF 中使用。 如需 WaitLock的詳細資訊,請參閱<

PassiveHandling

設定為 FALSE,以在裝置的 IRQL (DIRQL) 進行中斷處理。 設定為 [TRUE,以進行被動層級中斷處理。 PassiveHandling 成員可在 1.11 版和更新版本的 KMDF 中使用。 從UMDF 2.0版開始,WDF_INTERRUPT_CONFIG_INIT 一律將此成員設定為TRUE。

ReportInactiveOnPowerDown

此成員僅適用於 KMDF。

只有在驅動程式尚未呼叫 WdfDeviceInitSetPowerNotPageable時,才會套用 WDF_TRI_STATE型別值。 此成員可以有下列其中一個值:

WdfTrue - KMDF 會在裝置轉換為低功率 (Dx) 狀態時報告中斷非作用中。 在 Windows 8 之前的作系統中,架構的行為符合 WdfFalse中所述的行為。

注意 如果 CanWakeDevice 設定為 true TRUE,且 ReportInactiveOnPowerDown 設定為 WdfTrue,則架構不會在裝置轉換為低電源狀態時報告中斷非作用中。
 

WdfFalse - 當裝置轉換為低功率 (Dx) 狀態時,KMDF 會中斷中斷。

WdfDefault - 以 ARM 為基礎的平臺上,架構的行為會比對 wdfTrue 所述。 在其他平臺上,架構的行為會比對 WdfFalse中所述。

ReportInactiveOnPowerDown 成員可在 1.11 版和更新版本的 KMDF 中使用。 UMDF 2.0 版無法使用。

如需報告中斷非使用中的詳細資訊,請參閱 讓ISR作用中或非使用中

CanWakeDevice

布爾值,指出是否使用中斷從低電源狀態喚醒裝置。 如果 FALSE,則不會使用中斷來喚醒裝置。 如果 TRUE,則會使用中斷來喚醒裝置。 CanWakeDevice 成員可從 KMDF 1.13 版和 UMDF 2.0 版開始提供。

備註

WDF_INTERRUPT_CONFIG 結構會作為 WdfInterruptCreate的輸入。

若要初始化 WDF_INTERRUPT_CONFIG 結構,您的驅動程式必須先呼叫 WDF_INTERRUPT_CONFIG_INIT,然後填入 WDF_INTERRUPT_CONFIG_INIT 未初始化的結構成員。

如果 自動串行化 為 TRUE,則適用下列規則:

  • 如果中斷的父對象執行層級是 WdfExecutionLevelPassive,則驅動程式可以在此組態結構中提供 EvtInterruptWorkItem,但不應該在此組態結構中提供 EvtInterruptDpc
  • 如果中斷的父對象執行層級是 WdfExecutionLevelDispatch,則驅動程式可以提供 EvtInterruptDpc,但不應該在此組態結構中提供 EvtInterruptWorkItem。 在第二個案例中,插斷物件本身仍然可以是被動的。
驅動程式可以使用這個結構的 WaitLock 成員,為 被動層級中斷處理提供自己的中斷鎖定。 如果驅動程式將 PassiveHandling 設定為 TRUE,但沒有提供 WaitLock,架構會在內部建立中斷鎖定。 架構會先取得被動層級中斷鎖定,再呼叫下列回呼函式:
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

如需 自動串行化 和同步處理驅動程式回呼函式的詳細資訊,請參閱 DriversFramework-Based 同步處理技術。

根據預設,KMDF 函式驅動程式是可分頁的電源。 驅動程式會呼叫 WdfDeviceInitSetPowerNotPageable,以指定它是不可分頁的。

在 1.11 之前的 KMDF 版本中,當裝置轉換成低功率 (Dx) 狀態時,架構一律會中斷電源可分頁驅動程式的中斷。 從 KMDF 1.11 版開始,您可以藉由設定此結構的 ReportInactiveOnPowerDown 成員來變更此行為。 針對非電源可分頁驅動程式,當發生 Dx 狀態轉換時,中斷會維持連線,而不論 reportInactiveOnPowerDown 中所設定的值為何。

如果 UMDF 驅動程式設定 ReportInactiveOnPowerDown,則會忽略此值。

如需在架構型驅動程式中處理中斷的詳細資訊,請參閱 處理硬體中斷

驅動程式可以使用此結構的 CanWakeDevice 成員來建立插斷,可用來將裝置從低功率 Dx 狀態帶回 D0。 驅動程式的 EvtInterruptIsr 回呼例程會排程在裝置進入 D0 之後於 IRQL = PASSIVE_LEVEL執行。

如需詳細資訊,請參閱 使用中斷來喚醒裝置

需求

要求 價值
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標題 wdfinterrupt.h (包括 Wdf.h)

另請參閱

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate