brianwsun
驱动牛犊
驱动牛犊
  • 注册日期2003-07-29
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1149回复:3

一个很菜的问题

楼主#
更多 发布于:2003-08-20 11:27
我是初学者(才学了几天Driver开发),现在想问个问题:
如果我写的Driver中得到一个数据或状态发生变化,如何主动通知应用程序来取数据呢?
我不希望让应用程序来查询状态。


谢谢指点。
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-20 11:34
可以利用Event的。应用中传一个Event给驱动,然后调WaitforSingleObject等这个Event。驱动中对这个Event进行改变。
前几天有个帖子讨论过这个问题,你搜一下。
助人乃快乐之本 有人给分就更快乐了 :-)
brianwsun
驱动牛犊
驱动牛犊
  • 注册日期2003-07-29
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
{
……
}
}
brianwsun
驱动牛犊
驱动牛犊
  • 注册日期2003-07-29
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-22 15:11
问题找到了,谢谢!
游客

返回顶部