// Public nt-lite DDK event declarations. #pragma once #include #include #include #include #include #include typedef enum EVENT_TYPE { EventAutoReset, EventManualReset, } EVENT_TYPE; typedef struct EVENT { OBJECT Header; SPINLOCK Lock; EVENT_TYPE Type; bool Signaled; LIST_ENTRY WaitList; LIST_ENTRY MultiWaitList; } EVENT; // Creates an event object. __declspec(dllexport) KSTATUS KeEventCreate(EVENT_TYPE type, bool initialState, EVENT** out); // Signals an event. __declspec(dllexport) void KeSignalEvent(EVENT* event); // Clears an event. __declspec(dllexport) void KeClearEvent(EVENT* event); // Waits for an event. __declspec(dllexport) KSTATUS KeWaitForEvent(EVENT* event, bool alertable); // Attempts to wait for an event without blocking. __declspec(dllexport) KSTATUS KeTryWaitEvent(EVENT* event); // Waits for one of several events. __declspec(dllexport) KSTATUS KeWaitForMultipleEvents(EVENT** events, uint32_t count, bool alertable, uint64_t timeoutMs, uint32_t* signaledIndexOut);