阅读:1775回复:13
KeReadStateEvent怪了???
我在DpcForIsr中调用KeReadStateEvent,可编译老是不通过:
error C2065: \'KeReadStateEvent\' : undeclared identifier 但我已经#include \"ntddk.h\"了啊,这到底是怎么回事啊?,恳请知情人士不吝赐教。 :( |
|
沙发#
发布于:2002-11-12 11:58
MyEvent在哪声明,有否初始化?KeInitializeEvent
|
|
|
板凳#
发布于:2002-11-11 17:11
还没放?? 忘不了,我的编译问题还没解决呢,我还得等啊 |
|
地板#
发布于:2002-11-11 15:23
还没放??
|
|
|
地下室#
发布于:2002-11-11 14:18
我没试过,不过应该无问题。 谢了,接分吧 |
|
5楼#
发布于:2002-11-11 14:12
我没试过,不过应该无问题。
调用KeResetEvent函数可以立即获得事件对象的当前状态,但该函数会把事件对象重置为非信号状态。 |
|
|
6楼#
发布于:2002-11-11 14:00
所以,你的调用顺序是反的。 我是想先判断事件的状态,如果事件有信号,就不用再KeSetEvent,如果无信号,我再KeSetEvent,若事件有信号,我再KeSetEvent,有没有问题呢? |
|
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代表事件处于非信号态。 所以,你的调用顺序是反的。 |
|
|
8楼#
发布于:2002-11-11 13:41
不解啊,你其他的函数没报错,如 KeSetEvent? 没错啊,如果把state=KeReadStateEvent(MyEvent);去掉,直接KeSetEvent(MyEvent,0,FALSE);就没报告错误。 另外,问一下如果我不管事件(MyEvent)的状态,直接KeSetEvent,有没有什么问题?谢谢 |
|
9楼#
发布于:2002-11-11 12:32
不解啊,你其他的函数没报错,如 KeSetEvent?
|
|
|
10楼#
发布于:2002-11-11 11:51
Windows 98不支持KeReadStateEvent函数,但支持其它ReadStateXxx函数。为了获得事件的状态,必须使用Windows 98的其它同步原语。 我是在2K下啊 |
|
11楼#
发布于:2002-11-11 11:50
Windows 98不支持KeReadStateEvent函数,但支持其它ReadStateXxx函数。为了获得事件的状态,必须使用Windows 98的其它同步原语。
|
|
|
12楼#
发布于:2002-11-11 11:31
你将KeReadStateEvent()的调用及上下两行贴出来看,说不定只是漏了一个符号而已。 是这样的: LONG state=0; state=KeReadStateEvent(MyEvent); if(!state) { KeSetEvent(MyEvent,0,FALSE); } |
|
13楼#
发布于:2002-11-11 11:24
你将KeReadStateEvent()的调用及上下两行贴出来看,说不定只是漏了一个符号而已。
|
|
|