阅读:1588回复:3
请求牛人解答::
范围都是在CE5.0后:
A 流驱动和本地驱动之间怎么进行交互? 是否涉及IO方式,CE不支持WDM模型?没有IRP的分配和下传递,没有DispatchTable没有派遣例程? 那么在这种情况下,怎么实现DeviceIoControl,只能通过流驱动吗??DriverObject,DeviceObject在CE下是怎么用的? B 对于内核驱动怎样与应用程序通讯?? 具体来说,内核驱动中创建的互斥量\事件对象怎么传递到应用层, 通过名字打开的方法能支持吗??如在两个进程间都调用Win32 的CreatMutex,CreatEvent? 我看了WindowdCE 程序设计中两个应用程序间通讯是这样的. 另一种方法是点对点消息,那么内核驱动怎么在有需要处理时候发送消息给应用程序的窗口呢? 驱动是怎么获得指定窗口的句柄的呢?? |
|
|
沙发#
发布于:2007-12-11 16:57
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2007-12-11 21:04
A.CE里没有2000中的那么多概念,毕竟它相对于2000是个很简单的系统. CE5中没有内核态的驱动,都在用户空间中执行.
B.用命名的CreatMutex,CreatEvent就可以实现进程间通信. 一般来说,不要在驱动中给应用程序发消息,不符合软件的设计要求. 可以要SERIAL一样等待事件. |
|
|
地板#
发布于:2007-12-12 22:05
不胜感激大家的支持,小弟也把自己的理解写出来:
wINDOWS CE device drivers are simple DLLs,写流驱动就象写一个简单的CE dll,只是有特定的导出接口. CE只支持流驱动和本地驱动,任何一个驱动都能用流驱动的框架来实现,CE大部分驱动都是设备管理器Device.exe加载 应用程序通过读写文件,如CreateFile,WriteFile,ReadFile等文件操作API调用Filesys.exe,然后对象存储管理器通过进程调度传到设备管理器,设备管理器调用流驱动导出的函数接口,执行相应操作,通过DeviceIoControl,实现与应用程序交互,在CE下没有MDL,用户缓冲区和系统缓冲区这么象XP这么复杂,应用程序和流驱动定义好相应的控制代码就可以交互了.驱动的加载都被映射到了slot0,和设备管理器. 进程间共享内存通过内存映射文件比较常用,也是通过函数CreateFileMapping (最后一个参数传递共享的名字)来实现打开文件. 在CE下实现进程间通讯可以通过使用内核同步对象,在各自的进程里通过内核对象名称调用创建函数,得到在各自进程地址空间的可用句柄,然后使用等待函数来实现同步.同步对象包括事件对象,互斥体对象,信号量,临界区域等,临界区域只能用于单个进程的多线程同步.系统内共享一个内核对象名字空间,还会记录一个使用计数,当计数为0时候,系统自动释放! |
|
|