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

架構微調鎖定物件的句柄,由先前呼叫 WdfSpinLockCreateNULL 取得。 如果此參數為 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

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

PassiveHandling

設定為 FALSE ,以在裝置的 IRQL (DIRQL) 中斷處理。 針對被動層級中斷處理設定為 TRUEPassiveHandling 成員可在 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 ,且 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 未初始化的結構成員。

如果 AutomaticSerialization 為 TRUE,則適用下列規則:

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

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

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

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

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

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

驅動程式可以使用這個結構的 CanWakeDevice 成員來建立中斷,可用來將裝置從低電源 Dx 狀態帶回 D0。 驅動程式的 EvtInterruptIsr 回呼例程排定在 IRQL = PASSIVE_LEVEL裝置進入 D0 之後執行。

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

規格需求

需求
最小 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