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,表示架構會將中斷物件的 EvtInterruptDpc 或 EvtInterruptWorkItem 回呼函式與中斷父物件下其他物件的回呼函式同步執行。 如需詳細資訊,請參閱接下來的<備註>一節。
EvtInterruptIsr
驅動程式 EvtInterruptIsr 回呼函式的指標。 此指標不可為 NULL。
EvtInterruptDpc
驅動程式 EvtInterruptDpc 回呼函式或 NULL 的指標。 驅動程式可以提供 EvtInterruptWorkItem 或 EvtInterruptDpc,但不能同時提供兩者。
EvtInterruptEnable
驅動程式 EvtInterruptEnable 回呼函式或 NULL 的指標。
EvtInterruptDisable
驅動程式 EvtInterruptDisable 回呼函式或 NULL 的指標。
EvtInterruptWorkItem
驅動程式 EvtInterruptWorkItem 回呼函式或 NULL 的指標。 驅動程式可以提供 EvtInterruptWorkItem 或 EvtInterruptDpc,但不能同時提供兩者。 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 不是 NULL, 則 PassiveHandling 必須設定為 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 所述。
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 。 在此第二個案例中,中斷物件本身仍然可以是被動的。
如需 自動串行化 和同步處理驅動程式回呼函式的詳細資訊,請參閱 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) |