zizzfish
驱动牛犊
驱动牛犊
  • 注册日期2005-11-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望24点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:1885回复:8

请教关于驱动程序和应用程序的通讯。

楼主#
更多 发布于:2007-09-14 18:24
想在驱动程序中发个消息给应用程序,通知应用程序读BUFFER的数据。
首先在应用程序中创建一个句柄,然后通过DeviceIoControl把句柄传给驱动程序,接着创建一个线程。
在驱动程序中,当接收到设备发送来的数据时,SETEVENT()。但是应用程序的线程都没执行到。
通过打印信息,应用成的句柄和驱动层的句柄的值相等的。
请问那为什么应用层的线程都没有执行呢?

最新喜欢:

LeopardLeopar...
pipi0714
驱动牛犊
驱动牛犊
  • 注册日期2004-04-13
  • 最后登录2012-02-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望158点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-15 08:46
在PC机上应该这样做:
主要是驱动部分
驱动程序通过ObReferenceByhandle获得内核模式的event
通过KeSetEvent触发
pipi0714
驱动牛犊
驱动牛犊
  • 注册日期2004-04-13
  • 最后登录2012-02-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望158点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-15 08:49
http://www.gd-emb.org/detail/id-29890.html
这篇文章是否对你有用
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-15 17:36
我的理解是你在应用程序中创建的事件是只在它自己的空间中起作用的,在DRIVER中已经是一个无效句柄了,

你看看串口驱动的做法:DRIVER自己做一个事件,当应用程序调用waitCommevent时便阻塞在这个事件中,条件满足时用setevent激活这个事件,应该程序便得以运行.
学海无涯
zizzfish
驱动牛犊
驱动牛犊
  • 注册日期2005-11-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望24点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-15 21:44
谢谢各位!
zxy00804
驱动牛犊
驱动牛犊
  • 注册日期2005-02-24
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望15点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-09-16 11:16
在驱动和应用中都创建相同名称的事件,然后在应用程序中创建等待线程,在驱动中SetEvent,这样应该就可以了,创建的事件必须是有名称的。
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
6楼#
发布于:2007-09-20 15:39
用户被禁言,该主题自动屏蔽!
shaohui99
驱动牛犊
驱动牛犊
  • 注册日期2007-05-15
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-09-20 16:37
zxy00804 说的对,创建有名事件就可以了
zizzfish
驱动牛犊
驱动牛犊
  • 注册日期2005-11-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望24点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-09-20 21:01
问题以解决了,在驱动程序中,在setevent()前加SetProcPermissions(0xffffffff);就可以了。

事件命名的方法还没试。等项目做完了有时间再试试。

谢谢,各位DX!
游客

返回顶部