[適用於 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。 否則,此方法可能會傳回下列其中一個值。
| 回傳碼 | 說明 |
|---|---|
|
WDF_INTERRUPT_CONFIG結構的大小不正確。 |
|
指定了無效的參數。 |
|
WdfInterruptCreate 在裝置啟動時呼叫。 WdfInterruptCreate 如果驅動程式的 EVT_WDF_DEVICE_PREPARE_HARDWARE 回呼例程呼叫 WdfInterruptCreate,的 InterruptRaw 和 InterruptTranslated 結構 WDF_INTERRUPT_CONFIG 的成員設為 NULL,也會傳回此值。 |
|
記憶體不足。 |
|
在 KMDF 1.9 版或更早版本中,驅動程式為 WDF_OBJECT_ATTRIBUTES 結構 ParentObject 成員指定了非NULL 值。
在 KMDF 1.11 版或更新版本中,驅動程式為 WDF_OBJECT_ATTRIBUTES 結構的 ParentObject 成員指定了架構裝置或佇列以外的值。 |
|
WDF_INTERRUPT_CONFIG 結構的 自動串行化 成員會設定為 true true 和下列其中一項:
|
|
驅動程式要求在 Windows 8 之前的平台上處理被動層級中斷。 |
如需 WdfInterruptCreate 方法可能會傳回的其他傳回值清單,請參閱 Framework 物件建立錯誤。
此方法也可能 傳回其他NTSTATUS 值。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
驅動程式通常會從 EvtDriverDeviceAdd 回呼函式呼叫 WdfInterruptCreate 方法。 從 KMDF 1.11 版和 UMDF 2.0 版開始,驅動程式可以從 EvtDevicePrepareHardware呼叫 WdfInterruptCreate。 如果驅動程式從 EvtDriverDeviceAdd呼叫 WdfInterruptCreate,則 InterruptRaw 和 InterruptTranslated 結構 WDF_INTERRUPT_CONFIG 的成員必須是 NULL。 如果驅動程式從 EvtDevicePrepareHardware呼叫 WdfInterruptCreateCreate,則這些成員都必須有效。
如果您要建立支持喚醒的中斷物件,如 使用中斷喚醒裝置中所述,您必須從 EvtDevicePrepareHardware呼叫 WdfInterruptCreate。
您的驅動程式必須針對其裝置所需的每個插斷向量呼叫 WdfInterruptCreate 一次。 如果裝置支援訊息訊號中斷 (MSI),驅動程式必須為每個裝置可支援的訊息建立插斷物件。
在 PnP 管理員將系統資源指派給裝置之後,架構會將裝置指派的中斷資源的相關信息儲存在驅動程式已建立的中斷物件中。 (不支援隨插即用的驅動程式 無法使用插斷物件。
系統可能不會指派裝置可支援的所有中斷資源。 例如,驅動程式會為能夠支援八個 MSI 訊息的裝置建立八個中斷物件。 不過,系統可能只將一則訊息指派給裝置。 在此情況下,將會使用七個中斷物件。
一般而言,您的驅動程式應該將中斷特定資訊儲存在中斷物件的 內容中,例如裝置中斷緩存器複製的內容,。 驅動程式傳遞給 WdfInterruptCreate 的 WDF_OBJECT_ATTRIBUTES 結構應該描述內容空間。
對於使用 Framework 1.9 版和更早版本的驅動程式,每個中斷物件的父系都是中斷所屬的裝置物件。 驅動程式無法變更此父代,而且 WDF_OBJECT_ATTRIBUTES 結構的 ParentObject 成員必須 NULL。 從 1.11 版開始,ParentObject 可以是架構裝置物件或佇列物件。 如果驅動程式指定父代,驅動程式必須將組態結構的 AutomaticSerialization 成員設定為 TRUE。 驅動程式可以在 DIRQL 指定兩個中斷的父代,被動層級中斷。
如果您的驅動程式提供 EvtCleanupCallback 或 EvtDestroyCallback 架構中斷物件的回呼函式,請注意架構會在 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) |