17#undef LIST_FOR_EACH_SAFE
64#define EXPIRE_NEVER (~(ULONGLONG) 0)
65#define TIMER_QUEUE_MAGIC 0x516d6954
94 if (
t->destroy &&
t->runcount == 0)
103 t->callback(
t->param,
TRUE);
136 if (set_event && &
t->entry ==
list_head(&
q->timers))
162 next =
t->expire +
t->period;
262 if (
t->runcount == 0)
364 DPRINT1(
"asynchronous return on completion event unimplemented\n");
383 if (!default_timer_queue)
390 (
void **) &default_timer_queue,
q,
NULL);
396 return default_timer_queue;
557 else if (CompletionEvent)
558 event = CompletionEvent;
562 if (
t->runcount == 0 &&
event)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_init(struct list_entry *head)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define INVALID_HANDLE_VALUE
GLdouble GLdouble GLdouble GLdouble q
#define InterlockedCompareExchangePointer
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlQueueWorkItem(_In_ WORKERCALLBACKFUNC Function, _In_opt_ PVOID Context, _In_ ULONG Flags)
NTSYSAPI NTSTATUS NTAPI RtlCreateTimerQueue(PHANDLE TimerQueue)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlDeleteTimer(_In_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_ HANDLE CompletionEvent)
NTSYSAPI NTSTATUS NTAPI RtlCreateTimer(_In_ HANDLE TimerQueue, _In_ PHANDLE phNewTimer, _In_ WAITORTIMERCALLBACKFUNC Callback, _In_ PVOID Parameter, _In_ ULONG DueTime, _In_ ULONG Period, _In_ ULONG Flags)
NTSYSAPI NTSTATUS NTAPI RtlDeleteTimerQueueEx(_In_ HANDLE TimerQueue, _In_opt_ HANDLE CompletionEvent)
NTSYSAPI NTSTATUS NTAPI RtlUpdateTimer(_In_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_ ULONG DueTime, _In_ ULONG Period)
NTSTATUS(NTAPI * PRTL_START_POOL_THREAD)(_In_ PTHREAD_START_ROUTINE Function, _In_ PVOID Parameter, _Out_ PHANDLE ThreadHandle)
NTSTATUS(NTAPI * PRTL_EXIT_POOL_THREAD)(_In_ NTSTATUS ExitStatus)
VOID(NTAPI * WAITORTIMERCALLBACKFUNC)(PVOID pvContext, BOOLEAN fTimerOrWaitFired)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(IN HANDLE hObject, IN BOOLEAN bAlertable, IN PLARGE_INTEGER Timeout)
NTSTATUS NTAPI NtSetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
NTSTATUS NTAPI NtQueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceCounter, OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL)
NTSTATUS NTAPI NtResumeThread(IN HANDLE ThreadHandle, OUT PULONG SuspendCount OPTIONAL)
#define STATUS_INVALID_HANDLE
#define STATUS_NOT_IMPLEMENTED
#define STATUS_INVALID_PARAMETER_1
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
#define LIST_FOR_EACH(cursor, list)
__WINE_SERVER_LIST_INLINE void list_add_before(struct list *elem, struct list *to_add)
static PLARGE_INTEGER get_nt_timeout(PLARGE_INTEGER pTime, ULONG timeout)
static void queue_move_timer(struct queue_timer *t, ULONGLONG time, BOOL set_event)
static void queue_add_timer(struct queue_timer *t, ULONGLONG time, BOOL set_event)
static ULONG queue_get_timeout(struct timer_queue *q)
static ULONGLONG queue_current_time(void)
static DWORD WINAPI timer_queue_thread_proc(LPVOID p)
NTSTATUS NTAPI RtlDeleteTimerQueue(HANDLE TimerQueue)
#define TIMER_QUEUE_MAGIC
static VOID WINAPI timer_callback_wrapper(LPVOID p)
static struct timer_queue * get_timer_queue(HANDLE TimerQueue)
static void queue_destroy_timer(struct queue_timer *t)
NTSTATUS NTAPI RtlCancelTimer(HANDLE TimerQueue, HANDLE Timer)
PRTL_EXIT_POOL_THREAD RtlpExitThreadFunc
NTSTATUS WINAPI RtlSetTimer(HANDLE TimerQueue, PHANDLE NewTimer, WAITORTIMERCALLBACKFUNC Callback, PVOID Parameter, DWORD DueTime, DWORD Period, ULONG Flags)
static void timer_cleanup_callback(struct queue_timer *t)
NTSTATUS RtlpInitializeTimerThread(VOID)
static void queue_remove_timer(struct queue_timer *t)
PRTL_START_POOL_THREAD RtlpStartThreadFunc
static void queue_timer_expire(struct timer_queue *q)
WAITORTIMERCALLBACKFUNC callback
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
_In_ WDFTIMER _In_ LONGLONG DueTime
_In_ PCCERT_CONTEXT _In_opt_ LPFILETIME pTime
#define WT_TRANSFER_IMPERSONATION
#define WT_EXECUTEINPERSISTENTTHREAD
#define WT_EXECUTEINIOTHREAD
#define WT_EXECUTELONGFUNCTION
#define WT_EXECUTEINTIMERTHREAD
_Must_inspect_result_ _In_ ULONG Flags
_In_ LARGE_INTEGER _In_ ULONG Period