使用者插入裝置
在下列案例中,裝置節點包含 KMDF 匯流排驅動程式,以及一或多個 KMDF 函式或篩選支援 PnP 裝置的驅動程式。
當使用者在執行系統時將裝置插入匯流排時,裝置的匯流排驅動程式和架構會執行下列工作:
裝置的匯流排驅動程式會偵測到裝置,並呼叫 WdfChildListAddOrUpdateChildDescriptionAsPresent。 (此程式稱為「動態列舉」。)
架構會呼叫匯流排驅動程式的 EvtChildListCreateDevice 回呼函式,因此匯流排驅動程式可以呼叫 WdfDeviceCreate 來為實體裝置建立架構裝置物件, (PDO) 。
架構會呼叫匯流排驅動程式的 EvtDeviceResourcesQuery 和 EvtDeviceResourceRequirementsQuery 回呼函式,以判斷裝置所需的系統硬體資源。
如需 KMDF 匯流排驅動程式電源啟動序列的詳細資訊,請參閱 匯流排驅動程式的電源啟動順序。
接下來,PnP 管理員會決定哪些額外的驅動程式 (函式驅動程式,並在裝置) 篩選驅動程式。 如果尚未載入這些驅動程式,PnP 管理員會載入這些驅動程式並呼叫其 DriverEntry 常式。 針對每個函式或篩選驅動程式,會發生下列動作:
架構會呼叫每個額外的驅動程式 EvtDriverDeviceAdd 回呼函式,讓驅動程式可以呼叫 WdfDeviceCreate 來建立架構裝置物件,代表驅動程式的裝置。 函式驅動程式會在 FDO) (建立功能裝置物件,而篩選驅動程式會建立篩選設備物件 (Filter DO) 。
架構會呼叫每個函式,並篩選驅動程式的 EvtDeviceFilterRemoveResourceRequirements 回呼函式,然後每個驅動程式的 EvtDeviceFilterAddResourceRequirements 回呼函式。 在裝置啟動之前,架構會立即呼叫 EvtDeviceRemoveAddedResources 回呼函式。 這三個回呼函式可讓篩選和函式驅動程式在 PnP 管理員將資源指派給裝置之前,修改裝置所需的硬體資源清單。 如需詳細資訊,請參閱 Framework-Based 驅動程式的硬體資源
架構可確保裝置已達到其運作 (D0) 電源狀態。
針對支援裝置的每個函式和篩選驅動程式,架構會依序執行下列動作,一次一個驅動程式,從驅動程式堆疊中最低驅動程式開始:
- 如果驅動程式存在) ,架構會呼叫驅動程式的 EvtDevicePrepareHardware 回呼函式 (,並傳遞 PnP 管理員指派給裝置的硬體資源清單。
- 如果驅動程式存在) ,架構會呼叫驅動程式的 EvtDeviceD0Entry 回呼函式 (。
- 架構會呼叫驅動程式的 EvtInterruptEnable 回呼函式 (,如果每個中斷存在) ,則它會呼叫驅動程式的 EvtDeviceD0EntryPostInterruptsEnabled 回呼函式, (如果存在) ,則驅動程式可以啟用裝置中斷。
- 如果硬體和驅動程式支援 DMA,架構會針對所建立的每個 DMA 通道呼叫驅動程式的EvtDmaEnablerFill、EvtDmaEnablerEnablerSelfManagedIoStart回呼函式, (它們存在) 。
- 架構會在) 存在時呼叫驅動程式的 EvtChildListScanForChildren 回呼函式 (。
- 架構會啟動所有裝置的電源受控 I/O 佇列。
- 如果驅動程式使用自我管理 I/O,架構會呼叫驅動程式的 EvtDeviceSelfManagedIoInit 回 呼函式。
如需 KMDF 函式或篩選驅動程式之電源啟動序列的詳細資訊,請參閱函式 或篩選驅動程式的電源啟動序列。