目前,Windows CE提供了四种设备模型:
专用于Windows CE的两种模型是:
1.本机设备驱动程序;
2.流接口驱动程序;
两种外部模型:
1.通用串行总线(USB)驱动程序;
2.网络驱动器接口标准(NDIS)驱动程序。
不同的驱动模型只能通过它们所支持的软件接口来区别,而不是它们所适用的设备。驱动程序模型决定了指定驱动程序输出的软件接口。
本机设备驱动程序:
本地设备驱动程序又被称为内建的驱动程序(Built-in Driver),它们被静态地链接到GWES,也就是说这些驱动程序不是作为一个单独的DLL存在的。
本机设备驱动程序适合于集成到基于Windows CE的平台的设备,设备驱动程序是专为底层内置硬件而设计的,如键盘、屏幕和PC卡插槽。因为本机设备去顶程序通常与基于Windows CE的平台有着紧密的连接而且每种本机设备驱动程序独有精确的和特殊的目的,微软提供了定制接口的方式来支持内部设备驱动程序。因为这些接口是专门用于Windows CE的,所以这类设备的驱动程序叫做本机设备驱动程序。微软为每一类内部设备驱动程序都定义设置接口,尽管每一类内部设备驱动程序各有一个设置接口,然而内部设备驱动程序却为一种特定类型的所有设备提供了一个功能性标准集。这就使得Windows CE操作系统可以处理类似的一种特定设备种类的所有情况,尽管有时可能存在硬件的差别。对于手持PC来说,本机设备驱动程序样本对所有建立在平台上的设备类型都是用,包括:显示器,电池,键盘,触摸屏,提示发光二极管,PC卡插槽。
流接口驱动程序:
流接口驱动程序又被称为可安装的驱动程序,是由设备管理器动态(device.exe)加载的用户模式的DLL。
具有定制接口和流接口的驱动程序是一般类型的设备驱动程序。流接口驱动程序是在用户一级的动态链接库,用来实现一组固定的函数称为流接口函数,这些流接口函数使得应用程序可以通过文件系统中的特殊文件而与设备进行接口。流接口驱动程序支持几乎任何类型的可以链接到基于Windows CE的平台外部设备。流接口驱动程序是动态链接库,由一个叫做设备管理程序的特殊应用程序加载、管理和卸载。所有流接口驱动程序是用同一个接口并调用同一个函数集----流接口函数。流接口驱动程序是为连接到基于Windows CE的平台的外围设备而设计的。包括调制解调器、打印机、数字相机、PC卡。所有这些外围设备都必须通过外部连接器如串行口或PC卡插槽等连接。因此,外围设备的驱动程序就像桌面计算机的打印机驱动程序一样:都当做用户模式的程序来运行,这些程序是用内置硬件的服务来控制它们的设备。如PC卡的设备驱动程序是用PC开服务库;PC卡服务库控制PC卡插槽硬件。如果外围设备被映射成系统内存空间的一部分,流接口驱动程序也可以直接与外围设备进行交互,例如Windows CE平台上的喇叭和麦克风就是这样。
通用串行总线(USB)驱动程序:通用串行总线驱动程序(USBD)将通用串行总线兼容(USB-Compliant)设备与Windows CE连接起来。通用串行总线驱动程序不要求输出任何特定类型的应用函数集。根据所用的设备,通用串行总线驱动程序可以输出流接口函数,定制函数集或者使用存在的Windows CE应用程序接口来展现设备的功能性。
网络驱动器接口标准(NDIS)驱动程序:网络驱动器接口标准(NDIS)驱动程序采用了NT操作系统的驱动程序。NDIS驱动程序是使网络协议生效的驱动程序模型,如TCP/IP和红外线数据通信协议,与网卡(NICS)驱动程序的具体实现细节无关。
Windows CE设备驱动程序按驱动程序的结构分为两种类型:
1.单片驱动程序(Monolithic Device Driver):基于单个码片(single piece of code),该码片直接把硬件设备的功能性传递给操作系统。
2.分层驱动程序(Layered Device Driver):由两个设置好的层组成,上层是模型设备驱动程序(MDD,Model Device Driver);下层是依赖平台的驱动程序(PDD,Platform Dependence Driver)。大多数的样本设备驱动程序都配置成分层的。
微软为链驱动程序提供了模型设备驱动程序(MDD)。MDD是通用的,既是源代码也是库。MDD执行下列任务:
链接PDD层并第一它希望调用的函数
把不同的函数集提供给操作系统
处理想中断处理这样的复杂任务
与GWES模块和内核通信
驱动程序不能调用Win32 API的唯一情况是驱动程序正在处理设备正在关闭的提示。这种情况下,设备驱动程序不能执行任何能引起其他事件的操作。
Windows CE不支持嵌套中断,一个中断的处理结束后方可开始另一个中断。
Windows CE把中断处理分为两部分:核心码部分的中断服务例程(ISR)和用户码部分的中断服务线程(IST)。中断服务例程是不可以嵌套的那部分,ISR程序常驻OEM适配层并能直接访问硬件注册表,它唯一的任务是确定要把哪个中断标识如SYSINTR_SERIAL返回给核心中断处理器。