项目14:驱动程序的加载(1)本节课程主要知识点驱动程序与动态链接库驱动程序的加载驱动程序的测试重点和难点重点驱动程序的加载难点驱动程序的加载驱动程序与动态链接库驱动程序与DLL在WindowsCE下,所有的驱动程序都是以用户态下的动态链接库来加载的
驱动程序的加载过程与一般的DLL加载过程完全相同
驱动程序的加载是由Device
exe动态加载到内存中的
驱动程序为什么是用户态的DLL
驱动程序作为用户态的DLL来实现有其特殊的考虑
这样的实现为操作系统和驱动程序的设计带来的灵活性
操作系统可在运行时动态地加载所需要的驱动程序,这样可以轻松地实现外设的即插即用
用户态的DLL可增强系统的稳定性把驱动程序放在操作系统的内核态来执行,可方便地对外部设备资源进行访问又不会增加系统的额外开销
这样做会对操作系统的稳定带来隐患
在内核模式下,驱动程序的崩溃会导致整个操作系统的崩溃
驱动程序放在用户地址空间,就不会对操作系统内核造成威胁了
用户态的DLL可提供更多便利将驱动程序编写成一个用户态的DLL,调试过程也就更为简单
驱动程序的编写可以使用应用程序使用的所有资源,可以使用C的运行时库,也可以使用Win32API甚至是MFC的函数
驱动程序的宿主驱动程序是一个个的DLL文件,DLL是无法单独加载运行的,需要有一个EXE进程把该DLL加载到自己的地址空间,然后才可执行DLL中的代码
这个进程称为驱动程序的宿主
在WindowsCE中,有三个系统的进程会加载和执行驱动程序的DLL
分别是Device
exe、GWES
exe和FileSys
Device
exeDevice
exe称为设备管理器,它负责加载和管理WindowsCE下的绝大多数设备驱动程序
这些驱动程序包括网卡驱动、电池驱动、声卡驱动、串口驱动、USB设备驱动及PCMCIA