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.dllDevice.exe本身的初始化就结束了。