阅读:1149回复:3
一个很菜的问题
我是初学者(才学了几天Driver开发),现在想问个问题:
如果我写的Driver中得到一个数据或状态发生变化,如何主动通知应用程序来取数据呢? 我不希望让应用程序来查询状态。 谢谢指点。 |
|
沙发#
发布于:2003-08-20 11:34
可以利用Event的。应用中传一个Event给驱动,然后调WaitforSingleObject等这个Event。驱动中对这个Event进行改变。
前几天有个帖子讨论过这个问题,你搜一下。 |
|
|
板凳#
发布于:2003-08-22 14:16
可以利用Event的。应用中传一个Event给驱动,然后调WaitforSingleObject等这个Event。驱动中对这个Event进行改变。 我找了一下,发现没有等待多个事件的,我目前的问题是:事件在Driver中和APP中都能得到(相互通知),但在Driver中等待多个事件时没有阻塞,请帮忙看一下下面的代码,是哪个参数不对(因为我接触Driver开发没几天,所以什么都不知道,只是根据各位大侠的指点,在模仿)。谢谢! //Driver中 PKEVENT h[2] = {NULL, NULL}; ... NTSTATUS state; LARGE_INTEGER llTime; llTime.LowPart = 600000; llTime.HighPart = 0; llTime.QuadPart = 600000; if (g_pkeNotice && g_pkePassed && g_pkeRejected) { KeSetEvent(g_pkeNotice, 2, FALSE);//通知APP h[0] = g_pkePassed;//已经保证有效 h[1] = g_pkeRejected;//同上 //等待APP的应答 state = KeWaitForMultipleObjects(2, h, WaitAny, Executive, KernelMode, FALSE, &llTime, NULL); switch(state) { case STATUS_TIMEOUT: …… break; case 0://这个有问题吗?因为我找不到合适的,所以用了这个 KeResetEvent(g_pkePassed); …… break; case 1://同上 KeResetEvent(g_pkeRejected); …… break; default: …… break; } } else { …… } } |
|
地板#
发布于:2003-08-22 15:11
问题找到了,谢谢!
|
|