1.Device.exe简介
在WinCE中,系统进程Device.exe负责对几乎所有的外设驱动程序进行管理,它也被称为设备管理器。
严格来说,设备管理器不是WinCE操作系统内核的一部分,仅仅是一个用户态下的普通进程,而且没有设备管理器WinCE也一样可以启动、运行。但设备管理器在WinCE中的作用却非常重要。
在WinCE系统启动时,设备管理器会随着启动,并且在整个系统运行时都会持续运行。在Common.reg中可以看到device.exe的启动:
……
[HKEY_LOCAL_MACHINE\init]
IF IMGCELOGENABLE
; At most one CeLog flush app (CeLogFlush, OSCapture) can be used
IF IMGAUTOFLUSH
"Launch05"="CeLogFlush.exe"
ENDIF
IF IMGOSCAPTURE
"Launch05"="OSCapture.exe"
ENDIF
ENDIF
; @CESYSGEN IF CE_MODULES_SHELL
IF IMGNOKITL !
"Launch10"="shell.exe"
ENDIF IMGNOKITL !
; @CESYSGEN ENDIF
; @CESYSGEN IF CE_MODULES_DEVICE
"Launch20"="device.exe"//可见device.exe是在系统启动后才被操作系统启动的。
; @CESYSGEN IF CE_MODULES_SHELL
IF IMGNOKITL !
"Depend20"=hex:0a,00//说明Device.exe依赖于shell.exe,只有shell.exe启动之后才能启动。
ENDIF IMGNOKITL !
2.Device.exe的初始化
对于不同的操作系统,设备与驱动程序的初始化几乎都是不一致的。在Windows CE中,设备的初始化分两个阶段:第一阶段是Device.exe的初始化;第二阶段是外设的枚举和加载。我们这里先讲Device.exe的初始化,用下面一张图来描述:
当系统冷启动后,操作系统内核NK首先运行,然后NK根据注册表HKEY_LOCAL_MACHINE\init下的内容陆续启动一些其他进程,Device.exe进程也是在这个时候被启动;
当Device.exe启动后,进行一系列自身的初始化工作,以便完成设备管理功能。按照顺序,Device.exe会先初始化本身的一些数据结构,再初始化I/O资源管理器和电源管理器;
接着,Device.exe根据注册表的设置,加载总线枚举器,让BusEnum.dll负责加载和初始化所有的内置设备。
至此,控制权就交给了BusEnum.dll,Device.exe本身的初始化就结束了。