numenshane
驱动牛犊
驱动牛犊
  • 注册日期2007-07-12
  • 最后登录2009-09-28
  • 粉丝0
  • 关注0
  • 积分280分
  • 威望37点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
阅读:1530回复:3

请求牛人解答::

楼主#
更多 发布于:2007-12-11 16:47
范围都是在CE5.0后:
   A 流驱动和本地驱动之间怎么进行交互?
   是否涉及IO方式,CE不支持WDM模型?没有IRP的分配和下传递,没有DispatchTable没有派遣例程?
那么在这种情况下,怎么实现DeviceIoControl,只能通过流驱动吗??DriverObject,DeviceObject在CE下是怎么用的?
   B 对于内核驱动怎样与应用程序通讯??
   具体来说,内核驱动中创建的互斥量\事件对象怎么传递到应用层, 通过名字打开的方法能支持吗??如在两个进程间都调用Win32 的CreatMutex,CreatEvent?
我看了WindowdCE 程序设计中两个应用程序间通讯是这样的. 另一种方法是点对点消息,那么内核驱动怎么在有需要处理时候发送消息给应用程序的窗口呢?
驱动是怎么获得指定窗口的句柄的呢??
gsasd fs agds sadgsa asfdas df
tracera
禁止发言
禁止发言
  • 注册日期2006-01-09
  • 最后登录2018-09-25
  • 粉丝8
  • 关注0
  • 积分-5788分
  • 威望135321点
  • 贡献值0点
  • 好评度625点
  • 原创分1分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-12-11 16:57
用户被禁言,该主题自动屏蔽!
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-11 21:04
A.CE里没有2000中的那么多概念,毕竟它相对于2000是个很简单的系统. CE5中没有内核态的驱动,都在用户空间中执行.
B.用命名的CreatMutex,CreatEvent就可以实现进程间通信.

一般来说,不要在驱动中给应用程序发消息,不符合软件的设计要求.
可以要SERIAL一样等待事件.
学海无涯
numenshane
驱动牛犊
驱动牛犊
  • 注册日期2007-07-12
  • 最后登录2009-09-28
  • 粉丝0
  • 关注0
  • 积分280分
  • 威望37点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
地板#
发布于: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时候,系统自动释放!
gsasd fs agds sadgsa asfdas df
游客

返回顶部