2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/ke/event.c
5 * PURPOSE: Implements events
6 * PROGRAMMER: David Welch (welch@mcmail.com)
11 /* INCLUDES *****************************************************************/
13 #include <ddk/ntddk.h>
14 #include <internal/ke.h>
15 #include <internal/id.h>
18 #include <internal/debug.h>
20 /* FUNCTIONS ****************************************************************/
22 VOID STDCALL
KeClearEvent (PKEVENT Event
)
24 DPRINT("KeClearEvent(Event %x)\n", Event
);
25 Event
->Header
.SignalState
=FALSE
;
28 VOID STDCALL
KeInitializeEvent (PKEVENT Event
,
34 if (Type
== NotificationEvent
)
36 IType
= InternalNotificationEvent
;
38 else if (Type
== SynchronizationEvent
)
40 IType
= InternalSynchronizationEvent
;
48 KeInitializeDispatcherHeader(&(Event
->Header
),
50 sizeof(Event
)/sizeof(ULONG
),State
);
51 InitializeListHead(&(Event
->Header
.WaitListHead
));
54 LONG STDCALL
KeReadStateEvent (PKEVENT Event
)
56 return(Event
->Header
.SignalState
);
59 LONG STDCALL
KeResetEvent (PKEVENT Event
)
61 return(InterlockedExchange(&(Event
->Header
.SignalState
),0));
64 LONG STDCALL
KeSetEvent (PKEVENT Event
,
70 DPRINT("KeSetEvent(Event %x, Wait %x)\n",Event
,Wait
);
71 KeAcquireDispatcherDatabaseLock(Wait
);
72 ret
= InterlockedExchange(&(Event
->Header
.SignalState
),1);
73 KeDispatcherObjectWake((DISPATCHER_HEADER
*)Event
);
74 KeReleaseDispatcherDatabaseLock(Wait
);