[ros-diffs] [jimtabor] 34419: Improve NtUserWaitForInputIdle, still a work in progress.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Fri Jul 11 03:24:47 CEST 2008


Author: jimtabor
Date: Thu Jul 10 20:24:47 2008
New Revision: 34419

URL: http://svn.reactos.org/svn/reactos?rev=34419&view=rev
Log:
Improve NtUserWaitForInputIdle, still a work in progress.

Modified:
    trunk/reactos/subsystems/win32/win32k/ntuser/message.c

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/message.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/message.c?rev=34419&r1=34418&r2=34419&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/message.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/message.c [iso-8859-1] Thu Jul 10 20:24:47 2008
@@ -1858,11 +1858,35 @@
   DWORD ret;
   LARGE_INTEGER Timeout; 
   HANDLE handles[2];
+  PEPROCESS Process;
+  PW32PROCESS W32Process;
+  NTSTATUS Status;
 
   UserEnterExclusive();
 
+  Status = ObReferenceObjectByHandle(hProcess,
+                                     PROCESS_QUERY_INFORMATION,
+                                     PsProcessType,
+                                     UserMode,
+                                     (PVOID*)&Process,
+                                     NULL);
+
+  if (!NT_SUCCESS(Status))
+  {
+     SetLastNtError(Status);
+     return (DWORD)-1;
+  }
+
+  W32Process = (PW32PROCESS)Process->Win32Process;
+  if (!W32Process)
+  {
+      ObDereferenceObject(Process);
+      SetLastWin32Error(ERROR_INVALID_PARAMETER);
+      return (DWORD)-1;
+  }
+
   handles[0] = hProcess;
-  handles[1] = &PsGetCurrentProcessWin32Process()->InputIdleEvent; // Fixme!
+  handles[1] = &W32Process->InputIdleEvent; // Fixme!
 
   if (!handles[1]) return 0;  /* no event to wait on */
 
@@ -1920,6 +1944,7 @@
   }
   while (1);
 WaitExit:
+  ObDereferenceObject(Process);
   UserLeave();
   return ret;
 }



More information about the Ros-diffs mailing list