yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1773回复:13

KeReadStateEvent怪了???

楼主#
更多 发布于:2002-11-11 11:08
我在DpcForIsr中调用KeReadStateEvent,可编译老是不通过:
error C2065: \'KeReadStateEvent\' : undeclared identifier
但我已经#include \"ntddk.h\"了啊,这到底是怎么回事啊?,恳请知情人士不吝赐教。 :(
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-11 11:24
你将KeReadStateEvent()的调用及上下两行贴出来看,说不定只是漏了一个符号而已。
少了e,就少了全部
yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-11 11:31
你将KeReadStateEvent()的调用及上下两行贴出来看,说不定只是漏了一个符号而已。

是这样的:
LONG state=0;
state=KeReadStateEvent(MyEvent);
if(!state)
{
   KeSetEvent(MyEvent,0,FALSE);
}
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-11 11:50
Windows 98不支持KeReadStateEvent函数,但支持其它ReadStateXxx函数。为了获得事件的状态,必须使用Windows 98的其它同步原语。
生命驱动,活力无限!
yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-11 11:51
Windows 98不支持KeReadStateEvent函数,但支持其它ReadStateXxx函数。为了获得事件的状态,必须使用Windows 98的其它同步原语。  

我是在2K下啊
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-11 12:32
不解啊,你其他的函数没报错,如 KeSetEvent?
生命驱动,活力无限!
yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-11 13:41
不解啊,你其他的函数没报错,如 KeSetEvent?

没错啊,如果把state=KeReadStateEvent(MyEvent);去掉,直接KeSetEvent(MyEvent,0,FALSE);就没报告错误。
另外,问一下如果我不管事件(MyEvent)的状态,直接KeSetEvent,有没有什么问题?谢谢
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-11 13:50
调用KeSetEvent函数是把事件置为信号态:
example:
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
LONG wassignalled = KeSetEvent(event, boost, wait);

而调用KeReadStateEvent函数(在任何IRQL上)可以测试事件的当前状态:
LONG signalled = KeReadStateEvent(event);
返回值不为0代表事件处于信号态,为0代表事件处于非信号态。

 所以,你的调用顺序是反的。

生命驱动,活力无限!
yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-11 14:00
所以,你的调用顺序是反的。

我是想先判断事件的状态,如果事件有信号,就不用再KeSetEvent,如果无信号,我再KeSetEvent,若事件有信号,我再KeSetEvent,有没有问题呢?
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-11 14:12
我没试过,不过应该无问题。
调用KeResetEvent函数可以立即获得事件对象的当前状态,但该函数会把事件对象重置为非信号状态。
生命驱动,活力无限!
yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-11 14:18
我没试过,不过应该无问题。
调用KeResetEvent函数可以立即获得事件对象的当前状态,但该函数会把事件对象重置为非信号状态。

谢了,接分吧
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-11 15:23
还没放??
生命驱动,活力无限!
yellowdog
驱动牛犊
驱动牛犊
  • 注册日期2002-10-11
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-11-11 17:11
还没放??

忘不了,我的编译问题还没解决呢,我还得等啊
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-11-12 11:58
MyEvent在哪声明,有否初始化?KeInitializeEvent
少了e,就少了全部
游客

返回顶部