阅读:1970回复:8
请教关于驱动程序和应用程序的通讯。
想在驱动程序中发个消息给应用程序,通知应用程序读BUFFER的数据。
首先在应用程序中创建一个句柄,然后通过DeviceIoControl把句柄传给驱动程序,接着创建一个线程。 在驱动程序中,当接收到设备发送来的数据时,SETEVENT()。但是应用程序的线程都没执行到。 通过打印信息,应用成的句柄和驱动层的句柄的值相等的。 请问那为什么应用层的线程都没有执行呢? |
|
最新喜欢:Leopar... |
沙发#
发布于:2007-09-15 08:46
在PC机上应该这样做:
主要是驱动部分 驱动程序通过ObReferenceByhandle获得内核模式的event 通过KeSetEvent触发 |
|
板凳#
发布于:2007-09-15 08:49
|
|
地板#
发布于:2007-09-15 17:36
我的理解是你在应用程序中创建的事件是只在它自己的空间中起作用的,在DRIVER中已经是一个无效句柄了,
你看看串口驱动的做法:DRIVER自己做一个事件,当应用程序调用waitCommevent时便阻塞在这个事件中,条件满足时用setevent激活这个事件,应该程序便得以运行. |
|
|
地下室#
发布于:2007-09-15 21:44
谢谢各位!
|
|
5楼#
发布于:2007-09-16 11:16
在驱动和应用中都创建相同名称的事件,然后在应用程序中创建等待线程,在驱动中SetEvent,这样应该就可以了,创建的事件必须是有名称的。
|
|
6楼#
发布于:2007-09-20 15:39
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2007-09-20 16:37
zxy00804 说的对,创建有名事件就可以了
|
|
8楼#
发布于:2007-09-20 21:01
问题以解决了,在驱动程序中,在setevent()前加SetProcPermissions(0xffffffff);就可以了。
事件命名的方法还没试。等项目做完了有时间再试试。 谢谢,各位DX! |
|