[ros-diffs] [jimtabor] 50205: [Win32k] - Fix all the user32 wine win test_enum_thread_windows tests.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Wed Dec 29 04:43:51 UTC 2010


Author: jimtabor
Date: Wed Dec 29 04:43:51 2010
New Revision: 50205

URL: http://svn.reactos.org/svn/reactos?rev=50205&view=rev
Log:
[Win32k]
- Fix all the user32 wine win test_enum_thread_windows tests.

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

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/window.c?rev=50205&r1=50204&r2=50205&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] Wed Dec 29 04:43:51 2010
@@ -1423,7 +1423,7 @@
          ObDereferenceObject(Desktop);
       }
    }
-   else
+   else // Build EnumThreadWindows list!
    {
       PETHREAD Thread;
       PTHREADINFO W32Thread;
@@ -1431,37 +1431,46 @@
       PWND Window;
 
       Status = PsLookupThreadByThreadId((HANDLE)dwThreadId, &Thread);
-      if(!NT_SUCCESS(Status))
-      {
+      if (!NT_SUCCESS(Status))
+      {
+         DPRINT1("Thread Id is not valid!\n");
          return ERROR_INVALID_PARAMETER;
       }
-      if(!(W32Thread = (PTHREADINFO)Thread->Tcb.Win32Thread))
+      if (!(W32Thread = (PTHREADINFO)Thread->Tcb.Win32Thread))
       {
          ObDereferenceObject(Thread);
-         DPRINT("Thread is not a GUI Thread!\n");
+         DPRINT1("Thread is not initialized!\n");
          return ERROR_INVALID_PARAMETER;
       }
 
       Current = W32Thread->WindowListHead.Flink;
-      while(Current != &(W32Thread->WindowListHead))
+      while (Current != &(W32Thread->WindowListHead))
       {
          Window = CONTAINING_RECORD(Current, WND, ThreadListEntry);
          ASSERT(Window);
 
-         if(bChildren || Window->spwndOwner != NULL)
+         if (dwCount < *pBufSize && pWnd)
          {
-             if(dwCount < *pBufSize && pWnd)
-             {
-                Status = MmCopyToCaller(pWnd++, &Window->head.h, sizeof(HWND));
-                if(!NT_SUCCESS(Status))
-                {
-                   SetLastNtError(Status);
-                   break;
-                }
-             }
-             dwCount++;
+            _SEH2_TRY
+            {
+               ProbeForWrite(pWnd, sizeof(HWND), 1);
+               *pWnd = Window->head.h;
+               pWnd++;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+               Status = _SEH2_GetExceptionCode();
+            }
+            _SEH2_END
+            if (!NT_SUCCESS(Status))
+            {
+               DPRINT1("Failure to build window list!\n");
+               SetLastNtError(Status);
+               break;
+            }
          }
-         Current = Current->Flink;
+         dwCount++;
+         Current = Window->ThreadListEntry.Flink;
       }
 
       ObDereferenceObject(Thread);




More information about the Ros-diffs mailing list