1. 程式人生 > >wince 6.0 裝置管理器架構

wince 6.0 裝置管理器架構

裝置管理器執行在Windows Embedded CE作業系統下,跟蹤載入的驅動及其介面。它從核心中啟動,並持續執行。當裝置介面變的可用或不可用時,裝置管理器能夠通知使用者。使用者,或者系統本身可以讓裝置介面變的可用或不可用。對於那些暴露了流介面(stream interface)的裝置介面,裝置管理器會通知核心該裝置介面支援CreateFile之類的檔案操作來訪問裝置。裝置管理器向裝置驅動傳送電源通知回撥,並提供電源管理服務。更多資訊,請參考

裝置管理器控制登錄檔中的Active項。只有裝置管理器才應該對Active項進行讀/寫訪問。通過裝置驅動的初始化函式中的一個引數,可以間接訪問Active

項。

裝置驅動搜尋HKEY_LOCAL_MACHINE/Drivers/RootKey登錄檔項,以確定開始裝置載入過程的項。RootKey的預設值為Drivers,但是其值通常為Drivers/BuiltIn。裝置管理器呼叫函式ActivateDeviceEx,以載入在RootKey的值指定的項中找到的Dll子項表示的驅動。Dll子項的預設值為BusEnum.dll,又被稱為匯流排列舉器。載入BusEnum.dll將會導致所有的裝置驅動被載入。通過ActivateDeviceEx載入的裝置,可以從其Active登錄檔項中讀取其activation handle。

裝置管理器將匯流排名稱與裝置進行關聯。未命名裝置也可以擁有一個匯流排名稱,因為就算應用

程式不能訪問該驅動,其他驅動或者系統實體,例如電源管理器,也可以訪問該驅動。匯流排名稱可以擁有一個與規則的裝置名稱不同的ACL。

驅動通過呼叫DMAdvertiseInterface能夠以程式設計的方式釋出介面。函式DMAdvertiseInterface使驅動能夠新增更多的可搜尋GUID到它們的關聯列表。DMAdvertiseInterface由Devmgr.dll提供。Devmgr.dl實現了大部分的裝置管理功能。只有裝置驅動能呼叫DMAdvertiseInterface,因為只有裝置管理器能載入Devmgr.dl。如果一個驅動在解除安裝的時候沒有釋出其介面不可用,裝置管理器會自動清除介面釋出通知。

裝置管理器元件

裝置管理器由nk.exe, device.dll和devmgr.dll三個元件構成。Nk.exe載入device.dll,device.dll是一個載入devmgr.dll的薄殼。devmgr.dll實現了裝置管理器的核心功能。

因為裝置管理器由兩個獨立的模組組成。裝置驅動可以直接連線裝置管理器,並呼叫其功能,如

Component Description

devcore

提供裝置管理器的核心功能。

iorm

提供I/O資源管理功能。 Iorm 是必需的元件,並且不能被刪除。

pmif

nopmif

Pmif提供了電源管理DLL入口點的介面。

Nopmif電源管理入口點的存根版本。