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 ******************************************************************/
12 #include <ddk/ntddk.h>
13 #include <kernel32/error.h>
17 #include <kernel32/kernel32.h>
19 /* FUNCTIONS *****************************************************************/
22 CreateWaitableTimerW(LPSECURITY_ATTRIBUTES lpTimerAttributes,
28 OBJECT_ATTRIBUTES ObjectAttributes;
29 UNICODE_STRING UnicodeName;
33 TimerType = NotificationTimer;
35 TimerType = SynchronizationTimer;
37 RtlInitUnicodeString(&UnicodeName, lpTimerName);
38 InitializeObjectAttributes(&ObjectAttributes,
44 Status = NtCreateTimer(&TimerHandle,
48 if (!NT_SUCCESS(Status))
50 SetLastErrorByStatus(Status);
59 CreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes,
63 UNICODE_STRING TimerNameU;
64 ANSI_STRING TimerName;
67 RtlInitAnsiString (&TimerName,
69 RtlAnsiStringToUnicodeString (&TimerNameU,
73 TimerHandle = CreateWaitableTimerW (lpTimerAttributes,
77 RtlFreeUnicodeString (&TimerNameU);
84 OpenWaitableTimerW(DWORD dwDesiredAccess,
85 WINBOOL bInheritHandle,
90 OBJECT_ATTRIBUTES ObjectAttributes;
91 UNICODE_STRING UnicodeName;
96 Attributes = OBJ_INHERIT;
99 RtlInitUnicodeString(&UnicodeName,
101 InitializeObjectAttributes(&ObjectAttributes,
107 Status = NtOpenTimer(&TimerHandle,
110 if (!NT_SUCCESS(Status))
112 SetLastErrorByStatus(Status);
121 OpenWaitableTimerA(DWORD dwDesiredAccess,
122 WINBOOL bInheritHandle,
125 UNICODE_STRING TimerNameU;
126 ANSI_STRING TimerName;
129 RtlInitAnsiString (&TimerName,
131 RtlAnsiStringToUnicodeString (&TimerNameU,
135 TimerHandle = OpenWaitableTimerW (dwDesiredAccess,
139 RtlFreeUnicodeString (&TimerNameU);
146 SetWaitableTimer(HANDLE hTimer,
147 const LARGE_INTEGER *pDueTime,
149 PTIMERAPCROUTINE pfnCompletionRoutine,
150 LPVOID lpArgToCompletionRoutine,
156 Status = NtSetTimer(hTimer,
157 (LARGE_INTEGER *)pDueTime,
158 pfnCompletionRoutine,
159 lpArgToCompletionRoutine,
163 if (!NT_SUCCESS(Status))
165 SetLastErrorByStatus(Status);
173 CancelWaitableTimer(HANDLE hTimer)
176 BOOLEAN CurrentState;
178 Status = NtCancelTimer(hTimer,
180 if (!NT_SUCCESS(Status))
182 SetLastErrorByStatus(Status);