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。 否則,此方法可能會傳回下列其中一個值。

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

啟動裝置之後呼叫 WdfInterruptCreate

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

STATUS_INSUFFICIENT_RESOURCES
記憶體不足。
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 結構的 AutomaticSerialization 成員會設定為 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,WDF_INTERRUPT_CONFIG 結構的 InterruptRawInterruptTranslated 成員必須是 NULL。 如果驅動程式從 EvtDevicePrepareHardware 呼叫 WdfInterruptCreate,這些成員必須同時有效。

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

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

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

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

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

對於使用架構 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
                            );

規格需求

需求
目標平台 Universal
最小 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