Implemented OpenThread and GetSystemTimes.
authorJames Tabor <james.tabor@reactos.org>
Fri, 30 Jul 2004 19:18:39 +0000 (19:18 +0000)
committerJames Tabor <james.tabor@reactos.org>
Fri, 30 Jul 2004 19:18:39 +0000 (19:18 +0000)
svn path=/trunk/; revision=10319

reactos/lib/kernel32/misc/stubs.c
reactos/lib/kernel32/misc/time.c
reactos/lib/kernel32/thread/thread.c

index ca067da..5ea04be 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: stubs.c,v 1.80 2004/07/08 00:40:30 weiden Exp $
+/* $Id: stubs.c,v 1.81 2004/07/30 19:18:39 jimtabor Exp $
  *
  * KERNEL32.DLL stubs (unimplemented functions)
  * Remove from this file, if you implement them.
@@ -901,21 +901,6 @@ GetSystemRegistryQuota(
     return 0;
 }
 
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GetSystemTimes(
-    LPFILETIME lpIdleTime,
-    LPFILETIME lpKernelTime,
-    LPFILETIME lpUserTime
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
 /*
  * @unimplemented
  */
@@ -1053,21 +1038,6 @@ MapUserPhysicalPagesScatter(
     return 0;
 }
 
-/*
- * @unimplemented
- */
-HANDLE
-STDCALL
-OpenThread(
-    DWORD dwDesiredAccess,
-    BOOL bInheritHandle,
-    DWORD dwThreadId
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
 /*
  * @unimplemented
  */
index cb87791..1c7ae60 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: time.c,v 1.29 2004/07/22 06:28:52 jimtabor Exp $
+/* $Id: time.c,v 1.30 2004/07/30 19:18:39 jimtabor Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
@@ -466,4 +466,45 @@ SetSystemTimeAdjustment(DWORD dwTimeAdjustment,
    return TRUE;
 }
 
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+GetSystemTimes(
+    LPFILETIME lpIdleTime,
+    LPFILETIME lpKernelTime,
+    LPFILETIME lpUserTime
+    )
+{
+   SYSTEM_PROCESSORTIME_INFO SysProcTime;
+   NTSTATUS Status;
+   
+   Status = ZwQuerySystemInformation(SystemProcessorPerformanceInformation,
+                                     &SysProcTime,
+                                     sizeof(SysProcTime),
+                                     NULL);
+                                     
+   if (!NT_SUCCESS(Status))
+     {
+        SetLastErrorByStatus(Status);
+        return FALSE;
+     }   
+/*
+       Good only for one processor system.
+ */
+
+   lpIdleTime->dwLowDateTime = SysProcTime.TotalProcessorRunTime.LowPart;
+   lpIdleTime->dwHighDateTime = SysProcTime.TotalProcessorRunTime.HighPart;
+
+   lpKernelTime->dwLowDateTime = SysProcTime.TotalProcessorTime.LowPart;
+   lpKernelTime->dwHighDateTime = SysProcTime.TotalProcessorTime.HighPart;
+
+   lpUserTime->dwLowDateTime = SysProcTime.TotalProcessorUserTime.LowPart;
+   lpUserTime->dwHighDateTime = SysProcTime.TotalProcessorUserTime.HighPart;
+   
+   return TRUE;
+}
+
 /* EOF */
index 7f4723a..d7ad3c9 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: thread.c,v 1.50 2004/06/13 20:04:56 navaraf Exp $
+/* $Id: thread.c,v 1.51 2004/07/30 19:18:39 jimtabor Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
@@ -249,6 +249,49 @@ CreateRemoteThread
 }
 
 
+/*
+ * @implemented
+ */
+HANDLE
+STDCALL
+OpenThread(
+    DWORD dwDesiredAccess,
+    BOOL bInheritHandle,
+    DWORD dwThreadId
+    )
+{
+   NTSTATUS errCode;
+   HANDLE ThreadHandle;
+   OBJECT_ATTRIBUTES ObjectAttributes;
+   CLIENT_ID ClientId ;
+   
+   ClientId.UniqueProcess = INVALID_HANDLE_VALUE;
+   ClientId.UniqueThread = (HANDLE)dwThreadId;
+   
+   ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
+   ObjectAttributes.RootDirectory = (HANDLE)NULL;
+   ObjectAttributes.SecurityDescriptor = NULL;
+   ObjectAttributes.SecurityQualityOfService = NULL;
+   ObjectAttributes.ObjectName = NULL;
+   
+   if (bInheritHandle == TRUE)
+     ObjectAttributes.Attributes = OBJ_INHERIT;
+   else
+     ObjectAttributes.Attributes = 0;
+   
+   errCode = NtOpenThread(&ThreadHandle,
+                          dwDesiredAccess,
+                          &ObjectAttributes,
+                          &ClientId);
+   if (!NT_SUCCESS(errCode))
+     {
+       SetLastErrorByStatus (errCode);
+       return NULL;
+     }
+   return ThreadHandle;
+}
+
+
 /*
  * @implemented
  */