gongfen
驱动牛犊
驱动牛犊
  • 注册日期2007-03-11
  • 最后登录2009-11-14
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望69点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:2040回复:3

关于内核态驱动之间的事件通迅问题

楼主#
更多 发布于:2009-02-08 14:35
研究了plx驱动的代码,是应用程序与驱动之间的事件通迅,
想改成驱动与驱动之间的事件通迅,应用程序与驱动之间通过ObReferenceObjectByHandle得到句柄:

    // Setup driver access to the user event handle
    status =
        ObReferenceObjectByHandle(
            (HANDLE)pEvent->hEvent, // Handle
            EVENT_MODIFY_STATE,     // Desired Access
            *ExEventObjectType,     // Object type
            KernelMode,             // Access Mode
            &pKEvent,               // Object pointer
            NULL                    // Handle information
            );

问一下,我怎么样在这个代码上下文中访问别的驱动建立的事件,因为我有一些事件要通知那边,
我建立了事件,传递过来指针,发现不行,郁闷...

附Programming the Miscrosoft Windows Driver中的一段ObReferenceObjectByHandle解释:

使用事件通知应用程序
有时驱动程序所要做的全部就是通知应用程序事件已经发生,不必向应用程序传递任何解释性的数据。能做到这一点的一个标准技术是让驱动程序发出一个普通的Win32事件信号。为此,应用程序首先要调用CreateEvent或OpenEvent打开一个事件对象句柄,然后通过调用DeviceIoControl把该事件句柄传递给驱动程序。驱动程序通过下面函数可以把该用户模式句柄转换成一个对象指针:

PKEVENT pEvent;
status = ObReferenceObjectByHandle(hEvent,
                   EVENT_MODIFY_STATE,
                   *ExEventObjectType,
                   Irp->RequestorMode,
                   (PVOID*) &pEvent,
                   NULL);
 

注意该IOCTL必须在PASSIVE_LEVEL级上处理,并且在拥有hEvent句柄的进程上下文中。

在此,驱动程序有了一个KEVENT对象的指针,它可以在适当时候作为调用KeSetEvent的参数。该驱动程序还拥有对该事件对象的参考计数,因此它必须在某一点上调用ObDereferenceObject。取消对象参考的恰当时间取决于应用程序与驱动程序的合作方式。比较好的办法是作为IRP_MJ_CLOSE处理的一部分,光盘上的EVWAIT例子演示了这种使用方法。

内核服务例程IoCreateNotificationEvent和IoCreateSynchronizationEvent创建的事件对象可以被用户模式应用程序所共享。但它们在Windows 98中无效,因此对真正的WDM驱动程序也无效。



有谁能够交流下?谢谢...
VGA采集卡: http://vgaic.cn
gongfen
驱动牛犊
驱动牛犊
  • 注册日期2007-03-11
  • 最后登录2009-11-14
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望69点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-02-13 16:22
总算搞定了. 代码就不贴了,是个基本的问题.
VGA采集卡: http://vgaic.cn
gongfen
驱动牛犊
驱动牛犊
  • 注册日期2007-03-11
  • 最后登录2009-11-14
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望69点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-02-13 16:27
不贴代码贴本书吧,有点大,传到我们网站上面了.
《Programming the Microsoft Windows driver model》的中文版.chm
下载地址:http://www.vgaic.cn/DownloadShow.asp?ID=35
个人觉得这本书挺有用的,希望和大家一起学习进步!!!
QQ: 744015483,开发ddk驱动交流...
VGA采集卡: http://vgaic.cn
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-03-02 18:21
驱动之间同步方法很多,使用事件通知的具体实现也有很多方式.
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部