ReactOS 0.4.16-dev-1946-g52006dd
event.c File Reference
#include <ntoskrnl.h>
#include <debug.h>
Include dependency graph for event.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

BOOLEAN NTAPI ExpInitializeEventImplementation (VOID)
 
NTSTATUS NTAPI NtClearEvent (IN HANDLE EventHandle)
 
NTSTATUS NTAPI NtCreateEvent (OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
 
NTSTATUS NTAPI NtOpenEvent (OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
 
NTSTATUS NTAPI NtPulseEvent (IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
 
NTSTATUS NTAPI NtQueryEvent (IN HANDLE EventHandle, IN EVENT_INFORMATION_CLASS EventInformationClass, OUT PVOID EventInformation, IN ULONG EventInformationLength, OUT PULONG ReturnLength OPTIONAL)
 
NTSTATUS NTAPI NtResetEvent (IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
 
NTSTATUS NTAPI NtSetEvent (IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
 
NTSTATUS NTAPI NtSetEventBoostPriority (IN HANDLE EventHandle)
 

Variables

POBJECT_TYPE ExEventObjectType = NULL
 
GENERIC_MAPPING ExpEventMapping
 
static const INFORMATION_CLASS_INFO ExEventInfoClass []
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 13 of file event.c.

Function Documentation

◆ ExpInitializeEventImplementation()

BOOLEAN NTAPI ExpInitializeEventImplementation ( VOID  )

Definition at line 39 of file event.c.

40{
41 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
44 DPRINT("Creating Event Object Type\n");
45
46 /* Create the Event Object Type */
47 RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
48 RtlInitUnicodeString(&Name, L"Event");
49 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
50 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(KEVENT);
51 ObjectTypeInitializer.GenericMapping = ExpEventMapping;
52 ObjectTypeInitializer.PoolType = NonPagedPool;
53 ObjectTypeInitializer.ValidAccessMask = EVENT_ALL_ACCESS;
54 ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK;
55 Status = ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ExEventObjectType);
56 if (!NT_SUCCESS(Status)) return FALSE;
57 return TRUE;
58}
LONG NTSTATUS
Definition: precomp.h:26
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define L(x)
Definition: resources.c:13
#define KEVENT
Definition: env_spec_w32.h:69
#define NonPagedPool
Definition: env_spec_w32.h:307
Status
Definition: gdiplustypes.h:25
#define OBJ_OPENLINK
Definition: winternl.h:230
#define EVENT_ALL_ACCESS
Definition: isotest.c:82
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
GENERIC_MAPPING ExpEventMapping
Definition: event.c:20
POBJECT_TYPE ExEventObjectType
Definition: event.c:18
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1136
#define DPRINT
Definition: sndvol32.h:73
GENERIC_MAPPING GenericMapping
Definition: obtypes.h:358
ULONG DefaultNonPagedPoolCharge
Definition: obtypes.h:365
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

Referenced by ExpInitSystemPhase1().

◆ NtClearEvent()

NTSTATUS NTAPI NtClearEvent ( IN HANDLE  EventHandle)

Definition at line 65 of file event.c.

66{
69 PAGED_CODE();
70
71 /* Reference the Object */
76 (PVOID*)&Event,
77 NULL);
78
79 /* Check for Success */
81 {
82 /* Clear the Event and Dereference */
85 }
86
87 /* Return Status */
88 return Status;
89}
#define PAGED_CODE()
VOID NTAPI KeClearEvent(IN PKEVENT Event)
Definition: eventobj.c:22
#define ExGetPreviousMode
Definition: ex.h:143
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
Definition: obref.c:494
#define EVENT_MODIFY_STATE
Definition: winbase.h:165
_Out_ PHANDLE EventHandle
Definition: iofuncs.h:857
#define ObDereferenceObject
Definition: obfuncs.h:203

Referenced by ConDrvFlushConsoleInputBuffer(), ConDrvGetConsoleInput(), and ConSrvTermReadStream().

◆ NtCreateEvent()

NTSTATUS NTAPI NtCreateEvent ( OUT PHANDLE  EventHandle,
IN ACCESS_MASK  DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes  OPTIONAL,
IN EVENT_TYPE  EventType,
IN BOOLEAN  InitialState 
)

Definition at line 96 of file event.c.

101{
106 PAGED_CODE();
107 DPRINT("NtCreateEvent(0x%p, 0x%x, 0x%p)\n",
109
110 /* Validate the event type */
111 if ((EventType != NotificationEvent) &&
113 {
115 }
116
117 /* Check if we were called from user-mode */
119 {
120 /* Enter SEH Block */
122 {
123 /* Check handle pointer */
125 }
127 {
128 /* Return the exception code */
130 }
131 _SEH2_END;
132 }
133
134 /* Create the Object */
139 NULL,
140 sizeof(KEVENT),
141 0,
142 0,
143 (PVOID*)&Event);
144 if (!NT_SUCCESS(Status))
145 {
146 DPRINT1("ObCreateObject failed: 0x%X\n", Status);
147 return Status;
148 }
149
150 /* Initialize the Event */
152
153 /* Insert it */
155 NULL,
157 0,
158 NULL,
159 &hEvent);
160 if (!NT_SUCCESS(Status))
161 {
162 DPRINT1("ObInsertObject failed: 0x%X\n", Status);
163 /* Note: ObInsertObject dereferences Event on failure */
164 return Status;
165 }
166
167 /* Enter SEH for return */
169 {
170 /* Return the handle to the caller */
172 }
174 {
175 /* Get the exception code */
177 }
178 _SEH2_END;
179
180 /* Return Status */
181 return Status;
182}
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
#define DPRINT1
Definition: precomp.h:8
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
LONG NTAPI ExSystemExceptionFilter(VOID)
Definition: harderr.c:349
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
static HANDLE hEvent
Definition: comm.c:54
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ EVENT_TYPE EventType
Definition: exfuncs.h:167
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ EVENT_TYPE _In_ BOOLEAN InitialState
Definition: exfuncs.h:169
#define KernelMode
Definition: asm.h:38
@ NotificationEvent
@ SynchronizationEvent
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
Definition: obhandle.c:2935
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
Definition: oblife.c:1039
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:181
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:82
#define _SEH2_END
Definition: pseh2_64.h:171
#define _SEH2_TRY
Definition: pseh2_64.h:71
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:184
#define ProbeForWriteHandle(Ptr)
Definition: probe.h:43
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2664
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7

Referenced by _At_(), AfdBind(), AfdConnect(), AfdGetInformation(), AfdSend(), AfdSendTo(), AfdSetInformation(), BaseSrvCreatePairWaitHandles(), ConDrvInitInputBuffer(), ConSrvInitConsole(), CreateContext(), CreateEventExW(), CSR_SERVER_DLL_INIT(), CsrApiPortInitialize(), GetSocketInformation(), GuiInit(), GuiInitFrontEnd(), InitializeUserModePnpManager(), LsaConnectUntrusted(), main(), ReadBlock(), RtlCreateTimerQueue(), RtlDeleteTimer(), RtlDeregisterWaitEx(), RtlRegisterWait(), SetSocketInformation(), SmpInit(), SmpLoadSubSystem(), SockCreateOrReferenceAsyncThread(), start_debugger_atomic(), StartAuthenticationPort(), Test_recv(), tp_waitqueue_lock(), UnhandledExceptionFilter(), WSPAccept(), WSPBind(), WSPCloseSocket(), WSPConnect(), WSPEnumNetworkEvents(), WSPEventSelect(), WSPGetPeerName(), WSPGetSockName(), WSPListen(), WSPRecv(), WSPRecvFrom(), WSPSelect(), WSPSend(), WSPSendTo(), and WSPShutdown().

◆ NtOpenEvent()

NTSTATUS NTAPI NtOpenEvent ( OUT PHANDLE  EventHandle,
IN ACCESS_MASK  DesiredAccess,
IN POBJECT_ATTRIBUTES  ObjectAttributes 
)

Definition at line 189 of file event.c.

192{
196 PAGED_CODE();
197 DPRINT("NtOpenEvent(0x%p, 0x%x, 0x%p)\n",
199
200 /* Check if we were called from user-mode */
202 {
203 /* Enter SEH Block */
205 {
206 /* Check handle pointer */
208 }
210 {
211 /* Return the exception code */
213 }
214 _SEH2_END;
215 }
216
217 /* Open the Object */
221 NULL,
223 NULL,
224 &hEvent);
225
226 /* Check for success */
227 if (NT_SUCCESS(Status))
228 {
229 /* Enter SEH for return */
231 {
232 /* Return the handle to the caller */
234 }
236 {
237 /* Get the exception code */
239 }
240 _SEH2_END;
241 }
242
243 /* Return status */
244 return Status;
245}
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
Definition: obhandle.c:2532

Referenced by CreateMemoryResourceNotification(), LsaConnectUntrusted(), LsapRmInitializeServer(), NtOpenObject(), OpenEventW(), and StartAuthenticationPort().

◆ NtPulseEvent()

NTSTATUS NTAPI NtPulseEvent ( IN HANDLE  EventHandle,
OUT PLONG PreviousState  OPTIONAL 
)

Definition at line 252 of file event.c.

254{
258 PAGED_CODE();
259 DPRINT("NtPulseEvent(EventHandle 0%p PreviousState 0%p)\n",
261
262 /* Check if we were called from user-mode */
264 {
265 /* Entry SEH Block */
267 {
268 /* Make sure the state pointer is valid */
270 }
272 {
273 /* Return the exception code */
275 }
276 _SEH2_END;
277 }
278
279 /* Open the Object */
284 (PVOID*)&Event,
285 NULL);
286
287 /* Check for success */
288 if(NT_SUCCESS(Status))
289 {
290 /* Pulse the Event */
293
294 /* Check if caller wants the old state back */
295 if(PreviousState)
296 {
297 /* Entry SEH Block for return */
299 {
300 /* Return previous state */
301 *PreviousState = Prev;
302 }
304 {
305 /* Get the exception code */
307 }
308 _SEH2_END;
309 }
310 }
311
312 /* Return Status */
313 return Status;
314}
LONG NTAPI KePulseEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
Definition: eventobj.c:69
long LONG
Definition: pedump.c:60
#define ProbeForWriteLong(Ptr)
Definition: probe.h:37
_In_ WDF_POWER_DEVICE_STATE PreviousState
Definition: wdfdevice.h:829
#define EVENT_INCREMENT
Definition: iotypes.h:597

Referenced by PulseEvent().

◆ NtQueryEvent()

NTSTATUS NTAPI NtQueryEvent ( IN HANDLE  EventHandle,
IN EVENT_INFORMATION_CLASS  EventInformationClass,
OUT PVOID  EventInformation,
IN ULONG  EventInformationLength,
OUT PULONG ReturnLength  OPTIONAL 
)

Definition at line 321 of file event.c.

326{
330 PEVENT_BASIC_INFORMATION BasicInfo =
331 (PEVENT_BASIC_INFORMATION)EventInformation;
332 PAGED_CODE();
333 DPRINT("NtQueryEvent(0x%p, 0x%x)\n", EventHandle, EventInformationClass);
334
335 /* Check buffers and class validity */
336 Status = DefaultQueryInfoBufferCheck(EventInformationClass,
338 sizeof(ExEventInfoClass) /
339 sizeof(ExEventInfoClass[0]),
341 EventInformation,
342 EventInformationLength,
344 NULL,
346 if(!NT_SUCCESS(Status))
347 {
348 /* Invalid buffers */
349 DPRINT("NtQuerySemaphore() failed, Status: 0x%x\n", Status);
350 return Status;
351 }
352
353 /* Get the Object */
358 (PVOID*)&Event,
359 NULL);
360
361 /* Check for success */
362 if(NT_SUCCESS(Status))
363 {
364 /* Entry SEH Block */
366 {
367 /* Return Event Type and State */
368 BasicInfo->EventType = Event->Header.Type;
369 BasicInfo->EventState = KeReadStateEvent(Event);
370
371 /* Return length */
373 }
375 {
376 /* Get the exception code */
378 }
379 _SEH2_END;
380
381 /* Dereference the Object */
383 }
384
385 /* Return status */
386 return Status;
387}
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG ReturnLength
LONG NTAPI KeReadStateEvent(IN PKEVENT Event)
Definition: eventobj.c:121
#define ICIF_PROBE_READ_WRITE
Definition: icif.h:24
#define EVENT_QUERY_STATE
Definition: security.c:53
struct _EVENT_BASIC_INFORMATION EVENT_BASIC_INFORMATION
struct _EVENT_BASIC_INFORMATION * PEVENT_BASIC_INFORMATION
static const INFORMATION_CLASS_INFO ExEventInfoClass[]
Definition: event.c:28
static __inline NTSTATUS DefaultQueryInfoBufferCheck(_In_ ULONG Class, _In_ const INFORMATION_CLASS_INFO *ClassList, _In_ ULONG ClassListEntries, _In_ ULONG Flags, _In_opt_ PVOID Buffer, _In_ ULONG BufferLength, _In_opt_ PULONG ReturnLength, _In_opt_ PULONG_PTR ReturnLengthPtr, _In_ KPROCESSOR_MODE PreviousMode)
Probe helper that validates the provided parameters whenever a NtQuery*** system call is invoked from...
Definition: probe.h:219
EVENT_TYPE EventType
Definition: extypes.h:902

Referenced by BaseCheckForVDM(), and QueryMemoryResourceNotification().

◆ NtResetEvent()

NTSTATUS NTAPI NtResetEvent ( IN HANDLE  EventHandle,
OUT PLONG PreviousState  OPTIONAL 
)

Definition at line 394 of file event.c.

396{
400 PAGED_CODE();
401 DPRINT("NtResetEvent(EventHandle 0%p PreviousState 0%p)\n",
403
404 /* Check if we were called from user-mode */
406 {
407 /* Entry SEH Block */
409 {
410 /* Make sure the state pointer is valid */
412 }
414 {
415 /* Return the exception code */
417 }
418 _SEH2_END;
419 }
420
421 /* Open the Object */
426 (PVOID*)&Event,
427 NULL);
428
429 /* Check for success */
430 if(NT_SUCCESS(Status))
431 {
432 /* Reset the Event */
433 LONG Prev = KeResetEvent(Event);
435
436 /* Check if caller wants the old state back */
437 if(PreviousState)
438 {
439 /* Entry SEH Block for return */
441 {
442 /* Return previous state */
443 *PreviousState = Prev;
444 }
446 {
447 /* Get the exception code */
449 }
450 _SEH2_END;
451 }
452 }
453
454 /* Return Status */
455 return Status;
456}
LONG NTAPI KeResetEvent(IN PKEVENT Event)
Definition: eventobj.c:134

Referenced by CSR_API(), DeviceInstallThread(), and ResetEvent().

◆ NtSetEvent()

NTSTATUS NTAPI NtSetEvent ( IN HANDLE  EventHandle,
OUT PLONG PreviousState  OPTIONAL 
)

Definition at line 463 of file event.c.

465{
469 PAGED_CODE();
470 DPRINT("NtSetEvent(EventHandle 0%p PreviousState 0%p)\n",
472
473 /* Check if we were called from user-mode */
475 {
476 /* Entry SEH Block */
478 {
479 /* Make sure the state pointer is valid */
481 }
483 {
484 /* Return the exception code */
486 }
487 _SEH2_END;
488 }
489
490 /* Open the Object */
495 (PVOID*)&Event,
496 NULL);
497 if (NT_SUCCESS(Status))
498 {
499 /* Set the Event */
502
503 /* Check if caller wants the old state back */
504 if (PreviousState)
505 {
506 /* Entry SEH Block for return */
508 {
509 /* Return previous state */
510 *PreviousState = Prev;
511 }
513 {
515 }
516 _SEH2_END;
517 }
518 }
519
520 /* Return Status */
521 return Status;
522}
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476

Referenced by AddInputEvents(), BaseSrvCleanupVDMResources(), ConSrvInitConsole(), CSR_API(), CsrApiRequestThread(), DeviceInstallThread(), GuiConsoleInputThread(), LsapNotifyPolicyChange(), LsapRmInitializeServer(), OnNcCreate(), PnpEventThread(), queue_add_timer(), queue_remove_timer(), RtlDeleteTimerQueueEx(), RtlDeregisterWaitEx(), RtlpUnWaitCriticalSection(), SetEvent(), SmpHandleConnectionRequest(), SmpInit(), SmpLoadSubSystem(), start_debugger_atomic(), StartAuthenticationPort(), tp_object_execute(), tp_object_release(), tp_waitqueue_unlock(), TpSetWait(), Wait_thread_proc(), and waitqueue_thread_proc().

◆ NtSetEventBoostPriority()

NTSTATUS NTAPI NtSetEventBoostPriority ( IN HANDLE  EventHandle)

Definition at line 529 of file event.c.

530{
533 PAGED_CODE();
534
535 /* Open the Object */
540 (PVOID*)&Event,
541 NULL);
542 if (NT_SUCCESS(Status))
543 {
544 /* Set the Event */
547 }
548
549 /* Return Status */
550 return Status;
551}
VOID NTAPI KeSetEventBoostPriority(IN PKEVENT Event, IN PKTHREAD *WaitingThread OPTIONAL)
Definition: eventobj.c:230

Variable Documentation

◆ ExEventInfoClass

const INFORMATION_CLASS_INFO ExEventInfoClass[]
static
Initial value:
=
{
}
#define ICIF_QUERY
Definition: icif.h:18
#define IQS_SAME(Type, Alignment, Flags)
Definition: icif.h:37
uint32_t ULONG
Definition: typedefs.h:59

Definition at line 28 of file event.c.

Referenced by NtQueryEvent().

◆ ExEventObjectType

◆ ExpEventMapping

GENERIC_MAPPING ExpEventMapping
Initial value:
=
{
}
#define SYNCHRONIZE
Definition: nt_native.h:61
#define STANDARD_RIGHTS_READ
Definition: nt_native.h:65
#define STANDARD_RIGHTS_WRITE
Definition: nt_native.h:66
#define STANDARD_RIGHTS_EXECUTE
Definition: nt_native.h:67

Definition at line 20 of file event.c.

Referenced by ExpInitializeEventImplementation().