Improve on a fixup for the difference between opengl and directx pixel
[wine] / dlls / kernel / thread.c
index be87668..ee3e601 100644 (file)
@@ -200,16 +200,27 @@ HANDLE WINAPI CreateRemoteThread( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE
  */
 HANDLE WINAPI OpenThread( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId )
 {
-    HANDLE ret = 0;
-    SERVER_START_REQ( open_thread )
+    NTSTATUS status;
+    HANDLE handle;
+    OBJECT_ATTRIBUTES attr;
+    CLIENT_ID cid;
+
+    attr.Length = sizeof(attr);
+    attr.RootDirectory = 0;
+    attr.Attributes = bInheritHandle ? OBJ_INHERIT : 0;
+    attr.ObjectName = NULL;
+    attr.SecurityDescriptor = NULL;
+    attr.SecurityQualityOfService = NULL;
+
+    cid.UniqueProcess = 0; /* FIXME */
+    cid.UniqueThread = (HANDLE)dwThreadId;
+    status = NtOpenThread( &handle, dwDesiredAccess, &attr, &cid );
+    if (status)
     {
-        req->tid     = dwThreadId;
-        req->access  = dwDesiredAccess;
-        req->inherit = bInheritHandle;
-        if (!wine_server_call_err( req )) ret = reply->handle;
+        SetLastError( RtlNtStatusToDosError(status) );
+        handle = 0;
     }
-    SERVER_END_REQ;
-    return ret;
+    return handle;
 }
 
 
@@ -237,11 +248,7 @@ void WINAPI ExitThread( DWORD code ) /* [in] Exit code for this thread */
         LdrShutdownProcess();
         exit( code );
     }
-    else
-    {
-        LdrShutdownThread();
-        wine_server_exit_thread( code );
-    }
+    else RtlExitUserThread( code );
 }