Windows CE 6.0下的驱动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows CE 6.0 6 0下的驱动 程序新特性
何宗键 “微软——同济”移动与嵌入式中心 同济大学软件学院 济大学软件学院
点击添加MSN机器人小新 为您收听下载MSDN中文网络广播课程加油助力!
本次课程内容包括
• 驱动程序开发简介 • CE 6.0的新内核架构对驱动程序的影响 • 内核模式驱动 VS 用户模式驱动 • 管理缓冲区 • 驱动程序的移植
收听本次课程需具备的条件
• 有过Windows CE 5.0开发经验 发经验 • 最好熟悉驱动程序开发 • 对CE 6内核有所了解
Level 300
驱动程序是什么?
Application Driver Win CE OS
Device
驱动程序是对物理或虚拟设备的抽象
回顾驱动程序的基本知识
z Native vs Stream ¾ 谁加载该驱动程序 (Who) z 单体 vs 分层 分层(MDD / PDD) ¾ 驱动的结构如何设计 (How) z Built In vs 动态加载 ¾ 驱动何时加载 (When) z Miniport、Wave、Touch ¾ 驱动的模型是什么样子 (What) z 内核驱动 vs 用户驱动 (新) 新 ¾ 在哪里加载驱动 (Where)
回顾Windows CE 5的内存架构
2 GB Kernel Space
Kernel
Large Memory Area
Slot 32 Slot 31 : : Slot 7 Slot 6 Slot 5 Slot 4 Slot 3 Slot 2
Slot 1 – ROM DLLs Slot 0 – Execution
Single 2 GB VM for all Processes
31 Slots for Processes
Execution Slot
Windows CE 6.0之后的内存模型
2 GB Kernel Space
Kernel Filesystem y GWES Drivers
2 GB p per Process
Process Code User VM
32 K Process
Windows CE 6中的两种驱动
User r Memor ry Spac ce
ServicesD.EXE Windows CE Shell Application Service 1 Service n Udevice.EXE Udevice.EXE User Mode Driver 1 User Mode Driver n
Marshalling Kernel Me K emory Space
Win32 CE APIs – COREDLL / WINSOCK / COMMCTRL / COMMDLG
KERNEL.DLL
DEVMRG.DLL GWES.DLL Drivers
FILESYS.DLL FSDMGR.DLL
Networking DLLs
OAL
K.COREDLL.DLL
内核态驱动——新瓶装旧酒
z 默认的驱动模式 z 在内核地址空间中运行 z 与内核模式的coredll, coredll k.coredll.dll k coredll dll链接 ¾自动完成,无需更改构建规则 z 效率高 ¾快速访问内核API ¾直接同步访问用户的缓冲区 z 稳定压倒一切! 稳定压倒 切! ¾驱动Crash可能会导致内核崩溃
——
用户态驱动老革命遇到新问题
Reflector服务
用户模式驱动程序加载User Mode Driver Host Process
User Application User Mode Driver 8ActivateDeviceEx XXX_Init(…) 1udevice.exe User Mode Driver User Mode
ActivateDeviceEx CreateProcess(,,Volume Name)10HANDLE Returned 39Kernel Mode 47Device Context XXX_Init forwarded to UM Driver Host
Reflector Service Device Manager 25
6
9HANDLE Parent Bus Driver
110HANDLE Returned
用户模式驱动注册表
p
[HKEY_LOCAL_MACHINE\Drivers\ProcGroup_0003]
"ProcName"="udevice.exe"
"ProcVolPrefix"="$udevice"
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Ethman]
"Prefix"="ETM"
"Dll"="ethman.dll"
"Index"=dword:1
; WZCSVC must be started before ethman
"Order"=dword:2A
; Flags==12 is DEVFLAGS_LOADLIBRARY and DEVFLAGS_LOAD_AS_USERPROC
; Flags12 is DEVFLAGS LOADLIBRARY and DEVFLAGS LOAD AS USERPROC
"Flags"=dword:12
"UserProcGroup"=dword:3 ;// default to group 3