47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
// Public nt-lite DDK event declarations.
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.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;
|
|
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);
|