/* FUNCTIONS ***************************************************************/
-typedef VOID (CALLBACK *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
-
HANDLE TimerThreadHandle = NULL;
NTSTATUS
NtClose(q->event);
RtlDeleteCriticalSection(&q->cs);
RtlFreeHeap(RtlGetProcessHeap(), 0, q);
+ RtlExitUserThread(STATUS_SUCCESS);
}
static void queue_destroy_timer(struct queue_timer *t)
NTSTATUS status = RtlCreateTimerQueue(&q);
if (status == STATUS_SUCCESS)
{
- PVOID p = _InterlockedCompareExchangePointer(
+ PVOID p = InterlockedCompareExchangePointer(
(void **) &default_timer_queue, q, NULL);
if (p)
/* Got beat to the punch. */
HANDLE CompletionEvent)
{
struct queue_timer *t = Timer;
- struct timer_queue *q = t->q;
+ struct timer_queue *q;
NTSTATUS status = STATUS_PENDING;
HANDLE event = NULL;
+ if (!Timer)
+ return STATUS_INVALID_PARAMETER_1;
+ q = t->q;
if (CompletionEvent == INVALID_HANDLE_VALUE)
status = NtCreateEvent(&event, EVENT_ALL_ACCESS, NULL, FALSE, FALSE);
else if (CompletionEvent)