3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: lib/kernel32/synch/timer.c
6 * PURPOSE: Implementing timer
10 /* INCLUDES ******************************************************************/
15 #include <kernel32/kernel32.h>
17 /* FUNCTIONS *****************************************************************/
23 CreateWaitableTimerW(LPSECURITY_ATTRIBUTES lpTimerAttributes,
29 OBJECT_ATTRIBUTES ObjectAttributes;
30 UNICODE_STRING UnicodeName;
34 TimerType = NotificationTimer;
36 TimerType = SynchronizationTimer;
38 RtlInitUnicodeString(&UnicodeName, lpTimerName);
39 InitializeObjectAttributes(&ObjectAttributes,
45 Status = NtCreateTimer(&TimerHandle,
49 if (!NT_SUCCESS(Status))
51 SetLastErrorByStatus(Status);
63 CreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes,
67 UNICODE_STRING TimerNameU;
68 ANSI_STRING TimerName;
71 RtlInitAnsiString (&TimerName,
73 RtlAnsiStringToUnicodeString (&TimerNameU,
77 TimerHandle = CreateWaitableTimerW (lpTimerAttributes,
81 RtlFreeUnicodeString (&TimerNameU);
91 OpenWaitableTimerW(DWORD dwDesiredAccess,
92 WINBOOL bInheritHandle,
97 OBJECT_ATTRIBUTES ObjectAttributes;
98 UNICODE_STRING UnicodeName;
103 Attributes = OBJ_INHERIT;
106 RtlInitUnicodeString(&UnicodeName,
108 InitializeObjectAttributes(&ObjectAttributes,
114 Status = NtOpenTimer(&TimerHandle,
117 if (!NT_SUCCESS(Status))
119 SetLastErrorByStatus(Status);
131 OpenWaitableTimerA(DWORD dwDesiredAccess,
132 WINBOOL bInheritHandle,
135 UNICODE_STRING TimerNameU;
136 ANSI_STRING TimerName;
139 RtlInitAnsiString (&TimerName,
141 RtlAnsiStringToUnicodeString (&TimerNameU,
145 TimerHandle = OpenWaitableTimerW (dwDesiredAccess,
149 RtlFreeUnicodeString (&TimerNameU);
159 SetWaitableTimer(HANDLE hTimer,
160 const LARGE_INTEGER *pDueTime,
162 PTIMERAPCROUTINE pfnCompletionRoutine,
163 LPVOID lpArgToCompletionRoutine,
169 Status = NtSetTimer(hTimer,
170 (LARGE_INTEGER *)pDueTime,
171 pfnCompletionRoutine,
172 lpArgToCompletionRoutine,
176 if (!NT_SUCCESS(Status))
178 SetLastErrorByStatus(Status);
189 CancelWaitableTimer(HANDLE hTimer)
192 BOOLEAN CurrentState;
194 Status = NtCancelTimer(hTimer,
196 if (!NT_SUCCESS(Status))
198 SetLastErrorByStatus(Status);