2 * PROJECT: ReactOS Win32K
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: subsystems/win32/win32k/eng/engevent.c
5 * PURPOSE: Event Support Routines
6 * PROGRAMMERS: Aleksey Bragin <aleksey@reactos.org>
9 /* INCLUDES ******************************************************************/
15 #define TAG_ENG TAG('E', 'n', 'g', ' ')
17 /* PUBLIC FUNCTIONS **********************************************************/
21 EngCreateEvent(OUT PEVENT
* Event
)
25 /* Allocate memory for the event structure */
26 EngEvent
= EngAllocMem(FL_NONPAGED_MEMORY
| FL_ZERO_MEMORY
,
30 /* Check if we are out of memory */
37 /* Set KEVENT pointer */
38 EngEvent
->pKEvent
= &EngEvent
->KEvent
;
40 /* Initialize the kernel event */
41 KeInitializeEvent(EngEvent
->pKEvent
,
45 /* Pass pointer to our structure to the caller */
48 DPRINT("EngCreateEvent() created %p\n", EngEvent
);
56 EngDeleteEvent(IN PEVENT Event
)
58 DPRINT("EngDeleteEvent(%p)\n", Event
);
60 /* Check if it's a usermapped event */
61 if (Event
->fFlags
& ENG_EVENT_USERMAPPED
)
63 /* Disallow deletion of usermapped events */
64 DPRINT1("Driver attempted to delete a usermapped event!\n");
68 /* Free the allocated memory */
77 EngClearEvent(IN PEVENT Event
)
80 KeClearEvent(Event
->pKEvent
);
85 EngSetEvent(IN PEVENT Event
)
88 return KeSetEvent(Event
->pKEvent
,
95 EngReadStateEvent(IN PEVENT Event
)
97 /* Read the event state */
98 return KeReadStateEvent(Event
->pKEvent
);
103 EngMapEvent(IN HDEV hDev
,
104 IN HANDLE hUserObject
,
109 DPRINT("EngMapEvent(%x %x %p %p %p)\n", hDev
, hUserObject
, Reserved1
, Reserved2
, Reserved3
);
116 EngUnmapEvent(IN PEVENT Event
)
118 DPRINT("EngUnmapEvent(%p)\n", Event
);
125 EngWaitForSingleObject(IN PEVENT Event
,
126 IN PLARGE_INTEGER TimeOut
)
130 DPRINT("EngWaitForSingleObject(%p %I64d)\n", Event
, TimeOut
->QuadPart
);
132 /* Validate parameters */
133 if (!Event
) return FALSE
;
135 /* Check if it's a usermapped event and fail in that case */
136 if (Event
->fFlags
& ENG_EVENT_USERMAPPED
)
138 /* Disallow deletion of usermapped events */
139 DPRINT1("Driver attempted to wait on a usermapped event!\n");
143 /* Wait for the event */
144 Status
= KeWaitForSingleObject(Event
->pKEvent
,
150 /* Check if there is a failure or a timeout */
151 if (!NT_SUCCESS(Status
))