2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: lib/kernel32/mem/timer.c
5 * PURPOSE: Implementing timer
9 /* INCLUDES ******************************************************************/
12 #include <ddk/ntddk.h>
14 /* FUNCTIONS *****************************************************************/
18 HANDLE
CreateWaitableTimerW(
19 LPSECURITY_ATTRIBUTES lpTimerAttributes
,
27 OBJECT_ATTRIBUTES ObjectAttributes
;
28 UNICODE_STRING UnicodeName
;
37 RtlInitUnicodeString(&UnicodeName
, lpTimerName
);
38 InitializeObjectAttributes(&ObjectAttributes
,
44 errCode
= NtCreateTimer(
55 HANDLE
CreateWaitableTimerA(
56 LPSECURITY_ATTRIBUTES lpTimerAttributes
,
61 WCHAR NameW
[MAX_PATH
];
64 while ((*lpTimerName
)!=0 && i
< MAX_PATH
)
66 NameW
[i
] = *lpTimerName
;
71 return CreateWaitableTimerW(lpTimerAttributes
,
76 HANDLE
OpenWaitableTimerW(
77 DWORD dwDesiredAccess
,
78 WINBOOL bInheritHandle
,
85 OBJECT_ATTRIBUTES ObjectAttributes
;
86 UNICODE_STRING UnicodeName
;
90 Attributes
= OBJ_INHERIT
;
93 RtlInitUnicodeString(&UnicodeName
, lpTimerName
);
94 InitializeObjectAttributes(&ObjectAttributes
,
100 errCode
= NtOpenTimer(
109 HANDLE
OpenWaitableTimerA(
110 DWORD dwDesiredAccess
,
111 WINBOOL bInheritHandle
,
115 WCHAR NameW
[MAX_PATH
];
118 while ((*lpTimerName
)!=0 && i
< MAX_PATH
)
120 NameW
[i
] = *lpTimerName
;
125 return OpenWaitableTimerW(dwDesiredAccess
, bInheritHandle
,(LPCWSTR
) NameW
);
129 WINBOOL
SetWaitableTimer(
131 LARGE_INTEGER
*pDueTime
,
133 PTIMERAPCROUTINE pfnCompletionRoutine
,
134 LPVOID lpArgToCompletionRoutine
,
141 errCode
= NtSetTimer(hTimer
, pDueTime
,
142 pfnCompletionRoutine
,
143 lpArgToCompletionRoutine
, fResume
, lPeriod
, &pState
);
145 if ( !NT_SUCCESS(errCode
) ) {
146 SetLastError(RtlNtStatusToDosError(errCode
));
152 WINBOOL
CancelWaitableTimer(HANDLE hTimer
)
155 BOOLEAN CurrentState
;
157 errCode
= NtCancelTimer(
161 if ( !NT_SUCCESS(errCode
) ) {
162 SetLastError(RtlNtStatusToDosError(errCode
));