请问大家,如何检测当前的事件(EVENT)的状态是有信号还是无信号,好象没什么函数

解决方案 »

  1.   

    wait的话有可能会改变event的状态可以用如下代码typedef enum _EVENT_INFORMATION_CLASS {
        EventBasicInformation
    } EVENT_INFORMATION_CLASS;typedef enum _EVENT_TYPE {
        NotificationEvent, // A manual-reset event
        SynchronizationEvent // An auto-reset event
    } EVENT_TYPE;typedef struct _EVENT_BASIC_INFORMATION {
        EVENT_TYPE EventType;
        LONG SignalState;
    } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;LONG (WINAPI *ZwQueryEvent) (HANDLE evt, EVENT_INFORMATION_CLASS, PVOID dat, ULONG dat_len, PULONG retLength);ZwQueryEvent = GetProcAddress (GetModuleHandle ("ntdll"), "ZwQueryEvent");EVENT_BASIC_INFORMATION ebi;
    ZwQueryEvent (event, EventBasicInformation, &ebi, sizeof (ebi), NULL);上面代码中可能会有些手误的地方,有的话,自己改改吧
      

  2.   

    LONG (WINAPI *ZwQueryEvent) (HANDLE evt, EVENT_INFORMATION_CLASS, PVOID dat, ULONG dat_len, PULONG retLength);
    上面这一句是定义一个函数指针吗?
    下面这一名
    ZwQueryEvent = GetProcAddress (GetModuleHandle ("ntdll"), "ZwQueryEvent");
    出现:
    error C2440: '=' : cannot convert from 'int (__stdcall *)(void)' to 'long (__stdcall *)(void *,enum _EVENT_INFORMATION_CLASS,void *,unsigned long,unsigned long *)'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast
    如何改正呢?
      

  3.   

    调试通过,多谢楼上大师typedef LONG (WINAPI *ZwQueryEvent) (HANDLE evt, EVENT_INFORMATION_CLASS, PVOID dat, ULONG dat_len, PULONG retLength);ZwQueryEvent aaa;aaa= (ZwQueryEvent)GetProcAddress (GetModuleHandle ("ntdll.dll"), "ZwQueryEvent");EVENT_BASIC_INFORMATION ebi;
    aaa(event, EventBasicInformation, &ebi, sizeof (ebi), NULL);