共用方式為


WdfInterruptCreate 函式 (wdfinterrupt.h)

[適用於 KMDF 和 UMDF]

WdfInterruptCreate 方法會建立架構中斷物件。

語法

NTSTATUS WdfInterruptCreate(
  [in]           WDFDEVICE              Device,
  [in]           PWDF_INTERRUPT_CONFIG  Configuration,
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [out]          WDFINTERRUPT           *Interrupt
);

參數

[in] Device

架構裝置物件的句柄。

[in] Configuration

由呼叫 WDF_INTERRUPT_CONFIG_INIT初始化之 WDF_INTERRUPT_CONFIG 結構的指標。

[in, optional] Attributes

WDF_OBJECT_ATTRIBUTES 結構的指標,指定架構中斷對象的物件屬性。 (如需詳細資訊,請參閱。這個參數是選擇性的,而且可以WDF_NO_OBJECT_ATTRIBUTES。

[out] Interrupt

接收新中斷物件句柄之位置的指標。

返回值

如果作業成功,WdfInterruptCreate 會傳回STATUS_SUCCESS。 否則,此方法可能會傳回下列其中一個值。

回傳碼 說明
STATUS_INFO_LENGTH_MISMATCH
WDF_INTERRUPT_CONFIG結構的大小不正確。
STATUS_INVALID_PARAMETER
指定了無效的參數。
STATUS_INVALID_DEVICE_STATE

WdfInterruptCreate 在裝置啟動時呼叫。

WdfInterruptCreate 如果驅動程式的 EVT_WDF_DEVICE_PREPARE_HARDWARE 回呼例程呼叫 WdfInterruptCreate的 InterruptRawInterruptTranslated 結構 WDF_INTERRUPT_CONFIG 的成員設為 NULL,也會傳回此值。

資源不足狀態
記憶體不足。
STATUS_WDF_PARENT_ASSIGNMENT_NOT_ALLOWED
在 KMDF 1.9 版或更早版本中,驅動程式為 WDF_OBJECT_ATTRIBUTES 結構 ParentObject 成員指定了非NULL 值。

在 KMDF 1.11 版或更新版本中,驅動程式為 WDF_OBJECT_ATTRIBUTES 結構的 ParentObject 成員指定了架構裝置或佇列以外的值。

STATUS_WDF_INCOMPATIBLE_EXECUTION_LEVEL
WDF_INTERRUPT_CONFIG 結構的 自動串行化 成員會設定為 true true 和下列其中一項:
  • 中斷父對象的執行層級是 WdfExecutionLevelPassive,而驅動程式已提供 EvtInterruptDpc
  • 中斷父對象的執行層級是 WdfExecutionLevelDispatch,而驅動程式已提供 EvtInterruptWorkItem
如需詳細資訊,請參閱 WDF_INTERRUPT_CONFIG
STATUS_NOT_SUPPORTED
驅動程式要求在 Windows 8 之前的平台上處理被動層級中斷。
 

如需 WdfInterruptCreate 方法可能會傳回的其他傳回值清單,請參閱 Framework 物件建立錯誤

此方法也可能 傳回其他NTSTATUS 值。

如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。

備註

驅動程式通常會從 EvtDriverDeviceAdd 回呼函式呼叫 WdfInterruptCreate 方法。 從 KMDF 1.11 版和 UMDF 2.0 版開始,驅動程式可以從 EvtDevicePrepareHardware呼叫 WdfInterruptCreate。 如果驅動程式從 EvtDriverDeviceAdd呼叫 WdfInterruptCreate,則 InterruptRawInterruptTranslated 結構 WDF_INTERRUPT_CONFIG 的成員必須是 NULL。 如果驅動程式從 EvtDevicePrepareHardware呼叫 WdfInterruptCreateCreate,則這些成員都必須有效。

如果您要建立支持喚醒的中斷物件,如 使用中斷喚醒裝置中所述,您必須從 EvtDevicePrepareHardware呼叫 WdfInterruptCreate

您的驅動程式必須針對其裝置所需的每個插斷向量呼叫 WdfInterruptCreate 一次。 如果裝置支援訊息訊號中斷 (MSI),驅動程式必須為每個裝置可支援的訊息建立插斷物件。

在 PnP 管理員將系統資源指派給裝置之後,架構會將裝置指派的中斷資源的相關信息儲存在驅動程式已建立的中斷物件中。 (不支援隨插即用的驅動程式 無法使用插斷物件。

系統可能不會指派裝置可支援的所有中斷資源。 例如,驅動程式會為能夠支援八個 MSI 訊息的裝置建立八個中斷物件。 不過,系統可能只將一則訊息指派給裝置。 在此情況下,將會使用七個中斷物件。

一般而言,您的驅動程式應該將中斷特定資訊儲存在中斷物件的 內容中,例如裝置中斷緩存器複製的內容,。 驅動程式傳遞給 WdfInterruptCreateWDF_OBJECT_ATTRIBUTES 結構應該描述內容空間。

對於使用 Framework 1.9 版和更早版本的驅動程式,每個中斷物件的父系都是中斷所屬的裝置物件。 驅動程式無法變更此父代,而且 WDF_OBJECT_ATTRIBUTES 結構的 ParentObject 成員必須 NULL。 從 1.11 版開始,ParentObject 可以是架構裝置物件或佇列物件。 如果驅動程式指定父代,驅動程式必須將組態結構的 AutomaticSerialization 成員設定為 TRUE。 驅動程式可以在 DIRQL 指定兩個中斷的父代,被動層級中斷

如果您的驅動程式提供 EvtCleanupCallbackEvtDestroyCallback 架構中斷物件的回呼函式,請注意架構會在 IRQL = PASSIVE_LEVEL 呼叫這些回呼函式。

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

範例

下列程式代碼範例會初始化 WDF_INTERRUPT_CONFIG 結構和 WDF_OBJECT_ATTRIBUTES 結構,然後呼叫 WdfInterruptCreate

NTSTATUS  status;
WDF_INTERRUPT_CONFIG  interruptConfig;
WDF_OBJECT_ATTRIBUTES  interruptAttributes;

WDF_INTERRUPT_CONFIG_INIT(
                          &interruptConfig,
                          MyEvtInterruptIsr,
                          MyEvtInterruptDpc
                          );
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &interruptAttributes,
                                        INTERRUPT_DATA
                                        );
status = WdfInterruptCreate(
                            device,
                            &interruptConfig,
                            &interruptAttributes,
                            &devExt->WdfInterrupt
                            );

需求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標題 wdfinterrupt.h (包括 Wdf.h)
程式庫 Wdf01000.sys (KMDF):WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
DDI 合規性規則 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf)

另請參閱

EvtDriverDeviceAdd

WDF_INTERRUPT_CONFIG

WDF_INTERRUPT_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE