硬體資源簡介
系統的硬體資源是 I/O 埠、中斷向量、直接記憶體存取 (DMA) 通道,以及其他必須指派給連線至系統之每個裝置的通訊路徑。 本節中的主題說明Kernel-Mode驅動程式架構 (KMDF) 驅動程式如何交涉裝置的硬體資源需求、檢閱建議的資源清單,然後接收指派的資源。 本節也會討論 KMDF 和 User-Mode Driver Framework (UMDF 如何) 驅動程式存取和對應指派的資源。
使用者插入 PnP 裝置之後, 列舉裝置 的驅動程式通常會建立一或多個 邏輯組態,也就是裝置可以使用的硬體資源組合。 這些設定包括下列選項:
開機設定,列出裝置在系統啟動時所需的硬體資源。 (針對 PnP 裝置,BIOS.) 會提供此資訊
裝置可運作的其他組態。 驅動程式會將這些額外的設定分組在 資源需求清單中。 PnP 管理員最終會從此清單中選取要指派給裝置的資源。
在驅動程式建立邏輯組態之後,它會將它們傳送至架構,而架構會將這些組態傳送給 PnP 管理員。
接下來,PnP 管理員會判斷裝置需要哪些驅動程式,並在尚未載入驅動程式時加以載入。 PnP 管理員會將裝置的硬體需求清單傳送至裝置的驅動程式以供檢閱。 函式和篩選驅動程式可以修改此清單,並將它傳回 PnP 管理員。
PnP 管理員會檢查修改的硬體需求清單,並判斷系統上實際可用的指定資源。 如果裝置需要先前指派給另一部裝置的 PnP 管理員資源,PnP 管理員可能會嘗試在系統裝置之間 轉散發資源 。
接下來,PnP 管理員會建立 資源清單,這是 PnP 管理員想要指派給裝置的資源清單。 PnP 管理員會將此清單傳送至裝置的驅動程式以供檢閱。 此時,函式和篩選驅動程式可以從清單中移除資源,但無法將資源新增至清單中。
最後,PnP 管理員會將資源指派給裝置。 架構會將資源清單傳遞至裝置的函式和篩選驅動程式,而裝置的函式驅動程式會執行必要的任何初始化,讓裝置和驅動程式可以存取資源。
下列步驟會更詳細地描述程式:
匯流排驅動程式會偵測裝置並 加以列舉 。
架構會呼叫匯流排驅動程式的 EvtDeviceResourcesQuery 回呼函式,此函式 會建立 描述裝置開機設定的資源清單。
架構會呼叫匯流排驅動程式的 EvtDeviceResourceRequirementsQuery 回呼函式,這會 建立裝置的資源需求清單 。
PnP 管理員會判斷裝置需要哪些驅動程式,並在尚未載入時載入它們,以建立裝置的驅動程式堆疊。
PnP 管理員會將裝置的資源需求清單傳送至驅動程式堆疊以供檢閱。 當清單向下移動驅動程式堆疊時,架構會呼叫每個函式,並篩選驅動程式的 EvtDeviceFilterRemoveResourceRequirements 回呼函式。 當清單移動備份堆疊時,架構會呼叫每個函式,並篩選驅動程式的 EvtDeviceFilterAddResourceRequirements 回呼函式。 這兩個回呼函式都可以 修改資源需求清單。
PnP 管理員會為裝置建立資源清單,並將它傳送至驅動程式堆疊以供檢閱。 架構會呼叫每個函式,並篩選驅動程式的EvtDeviceRemoveAddedResources回呼函式,這會移除驅動程式EvtDeviceFilterAddResourceRequirements回呼函式新增的資源,讓匯流排驅動程式不會嘗試使用這些函式。
架構會從 PnP 管理員接收最終資源清單,並加以儲存。
如果驅動程式呼叫 WdfInterruptCreate 來建立中斷物件,架構會在資源清單中尋找中斷資源,並將其指派給中斷物件。
裝置進入未初始化的 D0 狀態之後,架構會呼叫每個驅動程式的 EvtDevicePrepareHardware 回呼函式,傳遞裝置資源清單的原始 和轉譯 版本做為輸入引數。 驅動程式可以儲存資源清單,直到架構呼叫驅動程式的 EvtDeviceReleaseHardware 回呼函式為止。