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 *****************************************************************/
20 CreateWaitableTimerW(LPSECURITY_ATTRIBUTES lpTimerAttributes,
26 OBJECT_ATTRIBUTES ObjectAttributes;
27 UNICODE_STRING UnicodeName;
31 TimerType = NotificationTimer;
33 TimerType = SynchronizationTimer;
35 RtlInitUnicodeString(&UnicodeName, lpTimerName);
36 InitializeObjectAttributes(&ObjectAttributes,
42 Status = NtCreateTimer(&TimerHandle,
46 if (!NT_SUCCESS(Status))
48 SetLastErrorByStatus(Status);
57 CreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes,
61 UNICODE_STRING TimerNameU;
62 ANSI_STRING TimerName;
65 RtlInitAnsiString (&TimerName,
67 RtlAnsiStringToUnicodeString (&TimerNameU,
71 TimerHandle = CreateWaitableTimerW (lpTimerAttributes,
75 RtlFreeUnicodeString (&TimerNameU);
82 OpenWaitableTimerW(DWORD dwDesiredAccess,
83 WINBOOL bInheritHandle,
88 OBJECT_ATTRIBUTES ObjectAttributes;
89 UNICODE_STRING UnicodeName;
94 Attributes = OBJ_INHERIT;
97 RtlInitUnicodeString(&UnicodeName,
99 InitializeObjectAttributes(&ObjectAttributes,
105 Status = NtOpenTimer(&TimerHandle,
108 if (!NT_SUCCESS(Status))
110 SetLastErrorByStatus(Status);
119 OpenWaitableTimerA(DWORD dwDesiredAccess,
120 WINBOOL bInheritHandle,
123 UNICODE_STRING TimerNameU;
124 ANSI_STRING TimerName;
127 RtlInitAnsiString (&TimerName,
129 RtlAnsiStringToUnicodeString (&TimerNameU,
133 TimerHandle = OpenWaitableTimerW (dwDesiredAccess,
137 RtlFreeUnicodeString (&TimerNameU);
144 SetWaitableTimer(HANDLE hTimer,
145 const LARGE_INTEGER *pDueTime,
147 PTIMERAPCROUTINE pfnCompletionRoutine,
148 LPVOID lpArgToCompletionRoutine,
154 Status = NtSetTimer(hTimer,
155 (LARGE_INTEGER *)pDueTime,
156 pfnCompletionRoutine,
157 lpArgToCompletionRoutine,
161 if (!NT_SUCCESS(Status))
163 SetLastErrorByStatus(Status);
171 CancelWaitableTimer(HANDLE hTimer)
174 BOOLEAN CurrentState;
176 Status = NtCancelTimer(hTimer,
178 if (!NT_SUCCESS(Status))
180 SetLastErrorByStatus(Status);