阅读:2091回复:3
关于内核态驱动之间的事件通迅问题
研究了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驱动程序也无效。 有谁能够交流下?谢谢... |
|
|
沙发#
发布于:2009-02-13 16:22
总算搞定了. 代码就不贴了,是个基本的问题.
|
|
|
板凳#
发布于:2009-02-13 16:27
不贴代码贴本书吧,有点大,传到我们网站上面了.
《Programming the Microsoft Windows driver model》的中文版.chm 下载地址:http://www.vgaic.cn/DownloadShow.asp?ID=35 个人觉得这本书挺有用的,希望和大家一起学习进步!!! QQ: 744015483,开发ddk驱动交流... |
|
|
地板#
发布于:2009-03-02 18:21
驱动之间同步方法很多,使用事件通知的具体实现也有很多方式.
|
|
|