wince 6.0 设备管理器架构
設備管理器運行在Windows Embedded CE操作系統下,跟蹤加載的驅動及其接口。它從內核中啟動,并持續運行。當設備接口變的可用或不可用時,設備管理器能夠通知用戶。用戶,或者系統本身可以讓設備接口變的可用或不可用。對于那些暴露了流接口(stream interface)的設備接口,設備管理器會通知內核該設備接口支持CreateFile之類的文件操作來訪問設備。設備管理器向設備驅動發送電源通知回調,并提供電源管理服務。更多信息,請參考Power Management。
?
設備管理器控制注冊表中的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實現了設備管理器的核心功能。
?
因為設備管理器由兩個獨立的模塊組成。設備驅動可以直接連接設備管理器,并調用其功能,如DMAdvertiseInterface,而不用產生系統調用的開銷。
?
| devcore | 提供設備管理器的核心功能。 |
| iorm | 提供I/O資源管理功能。 Iorm 是必需的組件,并且不能被刪除。 |
| pmif nopmif | Pmif提供了電源管理DLL入口點的接口。 Nopmif電源管理入口點的存根版本。 ? |
總結
以上是生活随笔為你收集整理的wince 6.0 设备管理器架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharpDevelop插件系统创建过程
- 下一篇: SQLite学习(三) - SQLite