设备管理器架构
----Windows Embedded CE 6.0 R3
原文:http://msdn.microsoft.com/en-us/library/ee484004(v=WinEmbedded.60).aspx
设备管理器运行在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,而不用产生系统调用的开销。
Component | Description |
---|---|
devcore | 提供设备管理器的核心功能。 |
iorm | 提供I/O资源管理功能。 Iorm 是必需的组件,并且不能被删除。 |
pmif nopmif | Pmif提供了电源管理DLL入口点的接口。 Nopmif电源管理入口点的存根版本。
|