PKEVENT
IoCreateSynchronizationEvent(
IN PUNICODE_STRING EventName,
OUT PHANDLE EventHandle
);
IoCreateSynchronizationEvent creates or opens a named synchronization event for use in serialization of access to hardware between two otherwise unrelated drivers.
IoCreateSynchronizationEvent returns a pointer to the created or opened event object or NULL if the event object could not be created or opened.
The event object is created if it does not already exist. IoCreateSynchronizationEvent sets the state of a new synchronization event to Signaled. If the event object already exists, it is simply opened. The pair of drivers that use a synchronization event call KeWaitForSingleObject with the PKEVENT pointer returned by this routine.
When a synchronization event is set to the Signaled state, a single thread of execution that was waiting on the event is released, and the event is automatically reset to the Not-Signaled state.
To release the event, a driver calls ZwClose with the event handle.
Callers of IoCreateSynchronizationEvent must be running at IRQL PASSIVE_LEVEL.
IoCreateNotificationEvent, KeWaitForSingleObject, RtlInitUnicodeString, ZwClose