Files
nt-lite/code/public/ntlite/ddk/event.h
T

46 lines
1.3 KiB
C

// Public nt-lite DDK event declarations.
#pragma once
#include <stdint.h>
#include <ntlite/status.h>
#include <ntlite/ddk/list.h>
#include <ntlite/ddk/object.h>
#include <ntlite/ddk/sync.h>
typedef enum EVENT_TYPE {
EventAutoReset,
EventManualReset,
} EVENT_TYPE;
typedef struct EVENT {
OBJECT Header;
SPINLOCK Lock;
EVENT_TYPE Type;
uint32_t Signaled;
LIST_ENTRY WaitList;
LIST_ENTRY MultiWaitList;
} EVENT;
// Creates an event object.
__declspec(dllexport) KSTATUS KeEventCreate(EVENT_TYPE type, uint32_t 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, uint8_t 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,
uint8_t alertable,
uint64_t timeoutMs,
uint32_t* signaledIndexOut);