阅读:1114回复:5
请大侠指教一个nt的问题
我为一块数据接受卡作一驱动(nt下的中断方式),想在驱动中发一个同步信号给应用程序,通知应用程序DPC已经将数据从设备内存中获得让应用程序发一个IRP过来,把数据放入IRP中的数据缓冲区中。请问我该如何设置这个同步信号?我在一个相近的例子代码里读到:好象作法是1、首先在设备扩展定义一个PKEVENT Event和一HANDLE Handle。2、在DRIVERENTRY中执行 extension->Event =IoCreateNotificationEvent (&eventName,&extension->Handle) ;
将Handle与Event相联系起来。3、在适当处用KeSetEvent、ClearEvent对信号进行操作就好象可以通知应用程序有事件发生。我的问题是:我查DDK参考手册说IoCreateNotificationEvent是将EVENT与HANDLE相关的线程联系,但现在,Handle是我在设备扩展中定义的,它怎么能代表应用程序这线程呢?为甚么对Event置位,则应用程序能受到消息?请大侠帮我解释明白,万分感谢!!! |
|
沙发#
发布于:2002-08-02 17:57
在app,要用函数waitforXXXobject来wait event的
看看waitforXXXobjetct的remark |
|
板凳#
发布于:2002-08-02 18:20
arthurtu 大侠:谢谢你的回答!我不大懂,请你指教:DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object to wait for DWORD dwMilliseconds // time-out interval in milliseconds ); 这里应用程序的hHandle怎么样与驱动中的设备扩展中的Handle发生联系,使得Event置真,则应用程序中的WaitForSingleObject能接受到反应。请你祥细解释一下好不好。谢谢!! |
|
地板#
发布于:2002-08-02 19:06
在应用程序中用CreateEvent产生Event的Handle,然后通过DeviceIOControl传送到驱动程序,在驱动程序中将此Handle
与一Event对象相连,当事件发生时,驱动程序触发事件, 应用程序的WaitForSingleObject函数将获得通知 |
|
地下室#
发布于:2002-08-02 20:06
也可以在driver create一个有name的event,在app用这个name来openevent,就得到了handle
|
|
5楼#
发布于:2002-08-02 20:41
谢谢两位大侠的帮忙!在这里要对chnh说声对不起,我已经没有分了(当东西当没了)所以,没办法给你加分了,先欠着吧,以后攒了分我一定会补回给你的。再向你说声对不起!
|
|