Implemented NtQueryTime
authorDavid Welch <welch@cwcom.net>
Thu, 6 Sep 2001 22:47:39 +0000 (22:47 +0000)
committerDavid Welch <welch@cwcom.net>
Thu, 6 Sep 2001 22:47:39 +0000 (22:47 +0000)
svn path=/trunk/; revision=2232

reactos/include/ddk/zwtypes.h
reactos/ntoskrnl/nt/nttimer.c
reactos/ntoskrnl/ps/thread.c

index a857c6a..ae9b651 100644 (file)
@@ -1498,6 +1498,17 @@ typedef struct _MOVEFILE_DESCRIPTOR
 //     SynchronizationTimer
 //} TIMER_TYPE;
 
+typedef struct _TIMER_BASIC_INFORMATION
+{
+  LARGE_INTEGER TimeRemaining;
+  BOOLEAN SignalState;
+} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
+
+typedef enum _TIMER_INFORMATION_CLASS
+{
+  TimerBasicInformation
+} TIMER_INFORMATION_CLASS;
+
 typedef
 struct _LPC_PORT_BASIC_INFORMATION
 {
index be4e902..2eeadfb 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: nttimer.c,v 1.11 2001/08/26 17:29:36 ekohl Exp $
+/* $Id: nttimer.c,v 1.12 2001/09/06 22:47:39 dwelch Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
@@ -17,6 +17,7 @@
 #include <internal/ke.h>
 #include <limits.h>
 #include <internal/pool.h>
+#include <internal/safe.h>
 
 #include <internal/debug.h>
 
@@ -219,11 +220,62 @@ NtOpenTimer(OUT PHANDLE TimerHandle,
 NTSTATUS STDCALL
 NtQueryTimer(IN HANDLE TimerHandle,
             IN CINT TimerInformationClass,
-            OUT PVOID TimerInformation,
+            OUT PVOID UnsafeTimerInformation,
             IN ULONG Length,
-            OUT PULONG ResultLength)
+            OUT PULONG UnsafeResultLength)
 {
-       UNIMPLEMENTED;
+  PNTTIMER Timer;
+  TIMER_BASIC_INFORMATION TimerInformation;
+  ULONG ResultLength;
+  NTSTATUS Status;
+
+  Status = ObReferenceObjectByHandle(TimerHandle,
+                                    TIMER_QUERY_STATE,
+                                    ExTimerType,
+                                    KeGetPreviousMode(),
+                                    (PVOID*)&Timer,
+                                    NULL);
+  if (!NT_SUCCESS(Status))
+    {
+      return(Status); 
+    }
+
+  if (TimerInformationClass != TimerBasicInformation)
+    {
+      ObDereferenceObject(Timer);
+      return(STATUS_INVALID_INFO_CLASS);
+    }
+  if (Length < sizeof(TIMER_BASIC_INFORMATION))
+    {
+      ObDereferenceObject(Timer);
+      return(STATUS_INFO_LENGTH_MISMATCH);
+    }
+  
+  memcpy(&TimerInformation.TimeRemaining, &Timer->Timer.DueTime,
+        sizeof(LARGE_INTEGER));
+  TimerInformation.SignalState = Timer->Timer.Header.SignalState;
+  ResultLength = sizeof(TIMER_BASIC_INFORMATION);
+  
+  Status = MmCopyToCaller(UnsafeTimerInformation, &TimerInformation,
+                         sizeof(TIMER_BASIC_INFORMATION));
+  if (!NT_SUCCESS(Status))
+    {
+      ObDereferenceObject(Timer);
+      return(Status);
+    }
+  
+  if (UnsafeResultLength != NULL)
+    {
+      Status = MmCopyToCaller(UnsafeResultLength, &ResultLength,
+                             sizeof(ULONG));
+      if (!NT_SUCCESS(Status))
+       {
+         ObDereferenceObject(Timer);
+         return(Status);
+       }
+    }
+  ObDereferenceObject(Timer);
+  return(STATUS_SUCCESS);
 }
 
 
index 7531bfd..238cc12 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: thread.c,v 1.78 2001/08/21 20:13:10 chorns Exp $
+/* $Id: thread.c,v 1.79 2001/09/06 22:47:39 dwelch Exp $
  *
  * COPYRIGHT:              See COPYING in the top level directory
  * PROJECT:                ReactOS kernel
@@ -429,8 +429,9 @@ KeSetPriorityThread (PKTHREAD Thread, KPRIORITY Priority)
 }
 
 
-NTSTATUS STDCALL NtAlertResumeThread(IN        HANDLE ThreadHandle,
-                                    OUT PULONG SuspendCount)
+NTSTATUS STDCALL 
+NtAlertResumeThread(IN HANDLE ThreadHandle,
+                   OUT PULONG  SuspendCount)
 {
    UNIMPLEMENTED;
 }