Kernel32 - Process Events

Source

C
BOOL Event_Create(nt_event_t* ptEvt, BOOL bManualReset, BOOL bInitialState) {
    ptEvt->hHandle = _CreateEventW(NULL, bManualReset, bInitialState, NULL);
    return ptEvt->hHandle != NULL;
}

BOOL Event_Wait(nt_event_t* ptEvt, DWORD dwMs) {
    if (!ptEvt || !ptEvt->hHandle) return FALSE;
    LARGE_INTEGER liTimeout;
    liTimeout.QuadPart = -(long long)dwMs * 10000LL;
    PLARGE_INTEGER pliTimeout = (dwMs == 0xFFFFFFFF) ? NULL : &liTimeout;
    NTSTATUS status = _NtWaitForSingleObject(ptEvt->hHandle, FALSE, pliTimeout);
    return NT_SUCCESS(status);
}

BOOL Event_Signal(nt_event_t* ptEvt) {
    return _SetEvent(ptEvt->hHandle);
}

BOOL Event_Reset(nt_event_t* ptEvt) {
    return _ResetEvent(ptEvt->hHandle);
}

void Event_Destroy(nt_event_t* ptEvt) {
    if (ptEvt->hHandle) _CloseHandle(ptEvt->hHandle);
}