1 /* $Id: timer.c,v 1.12 2003/01/15 21:24:36 chorns Exp $
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
);