[Ros-cis] [chorns] 17779: Revert r17765:

chorns at svn.reactos.com chorns at svn.reactos.com
Sat Sep 10 20:57:50 CEST 2005


Revert r17765:
-cursoricon: naming changes, cleanup
-fix: hide/show caret to accept NULL hWnds
-some handle to pointer converions
-double handle table size
-fix: co_WinPosActivateOtherWindow was trying to access desktop parent
Modified: trunk/reactos/subsys/win32k/include/object.h
Modified: trunk/reactos/subsys/win32k/include/userfuncs.h
Modified: trunk/reactos/subsys/win32k/ntuser/caret.c
Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c
Modified: trunk/reactos/subsys/win32k/ntuser/focus.c
Modified: trunk/reactos/subsys/win32k/ntuser/object.c
Modified: trunk/reactos/subsys/win32k/ntuser/window.c
Modified: trunk/reactos/subsys/win32k/ntuser/winpos.c
  _____  

Modified: trunk/reactos/subsys/win32k/include/object.h
--- trunk/reactos/subsys/win32k/include/object.h	2005-09-10
16:31:48 UTC (rev 17778)
+++ trunk/reactos/subsys/win32k/include/object.h	2005-09-10
18:55:57 UTC (rev 17779)
@@ -42,7 +42,7 @@

   otWindow,
   otMenu,
   otAccel,
-  otCursorIcon,
+  otCursor,
   otHook,
   otMonitor,
   otClass //fixme: remove
  _____  

Modified: trunk/reactos/subsys/win32k/include/userfuncs.h
--- trunk/reactos/subsys/win32k/include/userfuncs.h	2005-09-10
16:31:48 UTC (rev 17778)
+++ trunk/reactos/subsys/win32k/include/userfuncs.h	2005-09-10
18:55:57 UTC (rev 17779)
@@ -21,8 +21,6 @@

 
 #define IntReferenceWindowObject(o) ObmReferenceObject(o)
 
-#define UserDerefObject(o) ObmReferenceObject(o)
-
 VOID FASTCALL IntReleaseWindowObject(PWINDOW_OBJECT Window);
 PWINDOW_OBJECT FASTCALL IntGetWindowObject(HWND hWnd);
 PVOID FASTCALL
@@ -138,7 +136,7 @@
 
 LONG FASTCALL UserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi);
 
-PWINDOW_OBJECT FASTCALL UserGetAncestor(PWINDOW_OBJECT Wnd, UINT Type);
+HWND FASTCALL UserGetAncestor(HWND hWnd, UINT Type);
 
 /*************** MENU.C ***************/
 
  _____  

Modified: trunk/reactos/subsys/win32k/ntuser/caret.c
--- trunk/reactos/subsys/win32k/ntuser/caret.c	2005-09-10 16:31:48 UTC
(rev 17778)
+++ trunk/reactos/subsys/win32k/ntuser/caret.c	2005-09-10 18:55:57 UTC
(rev 17779)
@@ -317,13 +317,11 @@

 }
 
 
-BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT Window OPTIONAL)
+BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT Window)
 {
    PUSER_MESSAGE_QUEUE ThreadQueue;
 
-   if (Window) ASSERT_REFS_CO(Window);
-
-   if(Window && Window->OwnerThread != PsGetCurrentThread())
+   if(Window->OwnerThread != PsGetCurrentThread())
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -331,7 +329,7 @@
 
    ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
 
-   if(Window && ThreadQueue->CaretInfo->hWnd != Window->hSelf)
+   if(ThreadQueue->CaretInfo->hWnd != Window->hSelf)
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -339,7 +337,7 @@
 
    if(ThreadQueue->CaretInfo->Visible)
    {
-      IntKillTimer((Window ? Window->hSelf : 0), IDCARETTIMER, TRUE);
+      IntKillTimer(Window->hSelf, IDCARETTIMER, TRUE);
 
       co_IntHideCaret(ThreadQueue->CaretInfo);
       ThreadQueue->CaretInfo->Visible = 0;
@@ -352,23 +350,24 @@
 
 BOOL
 STDCALL
-NtUserHideCaret(HWND hWnd OPTIONAL)
+NtUserHideCaret(
+   HWND hWnd)
 {
-   PWINDOW_OBJECT Window = NULL;
+   PWINDOW_OBJECT Window;
    DECLARE_RETURN(BOOL);
    BOOL ret;
 
    DPRINT("Enter NtUserHideCaret\n");
    UserEnterExclusive();
 
-   if(hWnd && !(Window = UserGetWindowObject(hWnd)))
+   if(!(Window = UserGetWindowObject(hWnd)))
    {
       RETURN(FALSE);
    }
 
-   if (Window) UserRefObjectCo(Window);
+   UserRefObjectCo(Window);
    ret = co_UserHideCaret(Window);
-   if (Window) UserDerefObjectCo(Window);
+   UserDerefObjectCo(Window);
 
    RETURN(ret);
 
@@ -379,13 +378,11 @@
 }
 
 
-BOOL FASTCALL co_UserShowCaret(PWINDOW_OBJECT Window OPTIONAL)
+BOOL FASTCALL co_UserShowCaret(PWINDOW_OBJECT Window)
 {
    PUSER_MESSAGE_QUEUE ThreadQueue;
 
-   if (Window) ASSERT_REFS_CO(Window);
-
-   if(Window && Window->OwnerThread != PsGetCurrentThread())
+   if(Window->OwnerThread != PsGetCurrentThread())
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -393,7 +390,7 @@
 
    ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
 
-   if(Window && ThreadQueue->CaretInfo->hWnd != Window->hSelf)
+   if(ThreadQueue->CaretInfo->hWnd != Window->hSelf)
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -406,7 +403,7 @@
       {
          co_IntSendMessage(ThreadQueue->CaretInfo->hWnd, WM_SYSTIMER,
IDCARETTIMER, 0);
       }
-      IntSetTimer((Window ? Window->hSelf : 0), IDCARETTIMER,
IntGetCaretBlinkTime(), NULL, TRUE);
+      IntSetTimer(Window->hSelf, IDCARETTIMER, IntGetCaretBlinkTime(),
NULL, TRUE);
    }
 
    return TRUE;
@@ -415,23 +412,24 @@
 
 BOOL
 STDCALL
-NtUserShowCaret(HWND hWnd OPTIONAL)
+NtUserShowCaret(
+   HWND hWnd)
 {
-   PWINDOW_OBJECT Window = NULL;
+   PWINDOW_OBJECT Window;
    DECLARE_RETURN(BOOL);
    BOOL ret;
 
    DPRINT("Enter NtUserShowCaret\n");
    UserEnterExclusive();
 
-   if(hWnd && !(Window = UserGetWindowObject(hWnd)))
+   if(!(Window = UserGetWindowObject(hWnd)))
    {
       RETURN(FALSE);
    }
 
-   if (Window) UserRefObjectCo(Window);
+   UserRefObjectCo(Window);
    ret = co_UserShowCaret(Window);
-   if (Window) UserDerefObjectCo(Window);
+   UserDerefObjectCo(Window);
 
    RETURN(ret);
 
  _____  

Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c
--- trunk/reactos/subsys/win32k/ntuser/cursoricon.c	2005-09-10
16:31:48 UTC (rev 17778)
+++ trunk/reactos/subsys/win32k/ntuser/cursoricon.c	2005-09-10
18:55:57 UTC (rev 17779)
@@ -41,14 +41,14 @@

 #define NDEBUG
 #include <debug.h>
 
-static PAGED_LOOKASIDE_LIST gProcessLookasideList;
-static LIST_ENTRY gCurIconList;
+static PAGED_LOOKASIDE_LIST ProcessLookasideList;
+static LIST_ENTRY CurIconList;
 
 /* Look up the location of the cursor in the GDIDEVICE structure
  * when all we know is the window station object
  * Actually doesn't use the window station, but should... */
 BOOL FASTCALL
-IntGetCursorLocation(PWINSTATION_OBJECT WinSta, POINT *loc)
+IntGetCursorLocation(PWINSTATION_OBJECT WinStaObject, POINT *loc)
 {
    HDC hDC;
    PDC dc;
@@ -72,27 +72,25 @@
 }
 
 
+#if 0
 static
-PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon)
+PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCursor)
 {
-   PCURICON_OBJECT CurIcon;
+   PCURICON_OBJECT Cursor;
    
-   if (!hCurIcon) return NULL;
+   if (!hCursor) return NULL;
    
-   CurIcon = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCurIcon,
otCursorIcon);
-   if (!CurIcon)
+   Cursor = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCursor,
otCursor);
+   if (!Cursor)
    {
-      /* we never set ERROR_INVALID_ICON_HANDLE. lets hope noone ever
checks for it */
       SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
       return NULL;
    }
 
-   ASSERT(USER_BODY_TO_HEADER(CurIcon)->RefCount >= 0);
-   return CurIcon;
+   ASSERT(USER_BODY_TO_HEADER(Cursor)->RefCount >= 0);
+   return Cursor;
 }
-
-#if 0
-
+#endif
 static
 PCURICON_OBJECT FASTCALL IntGetCurIconObject(HCURSOR hCursor)
 {
@@ -100,7 +98,7 @@
    
    if (!hCursor) return NULL;
    
-   Cursor = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCursor,
otCursorIcon);
+   Cursor = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCursor,
otCursor);
    if (!Cursor)
    {
       SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
@@ -113,12 +111,12 @@
    
    return Cursor;
 }
-#endif
 
 
+
 #define COLORCURSORS_ALLOWED FALSE
 HCURSOR FASTCALL
-IntSetCursor(PWINSTATION_OBJECT WinSta, PCURICON_OBJECT NewCursor,
+IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT
NewCursor,
              BOOL ForceChange)
 {
    BITMAPOBJ *BitmapObj;
@@ -134,7 +132,7 @@
    XLATEOBJ *XlateObj = NULL;
    HDC Screen;
 
-   CurInfo = IntGetSysCursorInfo(WinSta);
+   CurInfo = IntGetSysCursorInfo(WinStaObject);
    OldCursor = CurInfo->CurrentCursorObject;
    if (OldCursor)
    {
@@ -324,16 +322,16 @@
 }
 
 BOOL FASTCALL
-IntSetupCurIconHandles(PWINSTATION_OBJECT WinSta)
+IntSetupCurIconHandles(PWINSTATION_OBJECT WinStaObject)
 {
-   ExInitializePagedLookasideList(&gProcessLookasideList,
+   ExInitializePagedLookasideList(&ProcessLookasideList,
                                   NULL,
                                   NULL,
                                   0,
                                   sizeof(CURICON_PROCESS),
                                   0,
                                   128);
-   InitializeListHead(&gCurIconList);
+   InitializeListHead(&CurIconList);
 
    return TRUE;
 }
@@ -348,7 +346,7 @@
  * life...
  */
 static BOOLEAN FASTCALL
-ReferenceCurIconByProcess(PCURICON_OBJECT CurIcon)
+ReferenceCurIconByProcess(PCURICON_OBJECT Object)
 {
    PW32PROCESS Win32Process;
    PLIST_ENTRY Search;
@@ -356,8 +354,8 @@
 
    Win32Process = PsGetWin32Process();
 
-   Search = CurIcon->ProcessList.Flink;
-   while (Search != &CurIcon->ProcessList)
+   Search = Object->ProcessList.Flink;
+   while (Search != &Object->ProcessList)
    {
       Current = CONTAINING_RECORD(Search, CURICON_PROCESS, ListEntry);
       if (Current->Process == Win32Process)
@@ -369,49 +367,49 @@
    }
 
    /* Not registered yet */
-   Current = ExAllocateFromPagedLookasideList(&gProcessLookasideList);
+   Current = ExAllocateFromPagedLookasideList(&ProcessLookasideList);
    if (NULL == Current)
    {
       return FALSE;
    }
-   InsertHeadList(&CurIcon->ProcessList, &Current->ListEntry);
+   InsertHeadList(&Object->ProcessList, &Current->ListEntry);
    Current->Process = Win32Process;
 
    return TRUE;
 }
 
 PCURICON_OBJECT FASTCALL
-IntFindExistingCurIconObject(PWINSTATION_OBJECT WinSta, HMODULE
hModule,
+IntFindExistingCurIconObject(PWINSTATION_OBJECT WinStaObject, HMODULE
hModule,
                              HRSRC hRsrc, LONG cx, LONG cy)
 {
    PLIST_ENTRY CurrentEntry;
-   PCURICON_OBJECT CurIcon;
+   PCURICON_OBJECT Object;
 
-   CurrentEntry = gCurIconList.Flink;
-   while (CurrentEntry != &gCurIconList)
+   CurrentEntry = CurIconList.Flink;
+   while (CurrentEntry != &CurIconList)
    {
-      CurIcon = CONTAINING_RECORD(CurrentEntry, CURICON_OBJECT,
ListEntry);
+      Object = CONTAINING_RECORD(CurrentEntry, CURICON_OBJECT,
ListEntry);
       CurrentEntry = CurrentEntry->Flink;
 
       //    if(NT_SUCCESS(ObmReferenceObjectByPointer(Object,
otCursorIcon))) //<- huh????
-//      ObmReferenceObject(  CurIcon);
-//      {
-      if((CurIcon->hModule == hModule) && (CurIcon->hRsrc == hRsrc))
+      ObmReferenceObject(  Object);
       {
-         if(cx && ((cx != CurIcon->Size.cx) || (cy !=
CurIcon->Size.cy)))
+         if((Object->hModule == hModule) && (Object->hRsrc == hRsrc))
          {
-//               ObmDereferenceObject(CurIcon);
-            continue;
+            if(cx && ((cx != Object->Size.cx) || (cy !=
Object->Size.cy)))
+            {
+               ObmDereferenceObject(Object);
+               continue;
+            }
+            if (! ReferenceCurIconByProcess(Object))
+            {
+               return NULL;
+            }
+
+            return Object;
          }
-         if (! ReferenceCurIconByProcess(CurIcon))
-         {
-            return NULL;
-         }
-
-         return CurIcon;
       }
-//      }
-//      ObmDereferenceObject(CurIcon);
+      ObmDereferenceObject(Object);
 
    }
 
@@ -419,39 +417,39 @@
 }
 
 PCURICON_OBJECT FASTCALL
-IntCreateCurIconHandle(PWINSTATION_OBJECT WinSta)
+IntCreateCurIconHandle(PWINSTATION_OBJECT WinStaObject)
 {
-   PCURICON_OBJECT CurIcon;
-   HANDLE hCurIcon;
+   PCURICON_OBJECT Object;
+   HANDLE Handle;
 
-   CurIcon = ObmCreateObject(&gHandleTable, &hCurIcon, otCursorIcon,
sizeof(CURICON_OBJECT));
+   Object = ObmCreateObject(&gHandleTable, &Handle, otCursor,
sizeof(CURICON_OBJECT));
 
-   if(!CurIcon)
+   if(!Object)
    {
       SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
       return FALSE;
    }
 
-   CurIcon->Self = hCurIcon;
-   InitializeListHead(&CurIcon->ProcessList);
+   Object->Self = Handle;
+   InitializeListHead(&Object->ProcessList);
 
-   if (! ReferenceCurIconByProcess(CurIcon))
+   if (! ReferenceCurIconByProcess(Object))
    {
       DPRINT1("Failed to add process\n");
-      ObmDeleteObject(hCurIcon, otCursorIcon);
-      ObmDereferenceObject(CurIcon);
+      ObmDeleteObject(Handle, otCursor);
+      ObmDereferenceObject(Object);
       return NULL;
    }
 
-   InsertHeadList(&gCurIconList, &CurIcon->ListEntry);
+   InsertHeadList(&CurIconList, &Object->ListEntry);
 
-   ObmDereferenceObject(CurIcon);
+   ObmDereferenceObject(Object);
 
-   return CurIcon;
+   return Object;
 }
 
 BOOLEAN FASTCALL
-IntDestroyCurIconObject(PWINSTATION_OBJECT WinSta, PCURICON_OBJECT
CurIcon, BOOL ProcessCleanup)
+IntDestroyCurIconObject(PWINSTATION_OBJECT WinStaObject,
PCURICON_OBJECT Object, BOOL ProcessCleanup)
 {
    PSYSTEM_CURSORINFO CurInfo;
    HBITMAP bmpMask, bmpColor;
@@ -461,10 +459,10 @@
    PW32PROCESS W32Process = PsGetWin32Process();
 
    /* Private objects can only be destroyed by their own process */
-   if (NULL == CurIcon->hModule)
+   if (NULL == Object->hModule)
    {
-      ASSERT(CurIcon->ProcessList.Flink->Flink ==
&CurIcon->ProcessList);
-      Current = CONTAINING_RECORD(CurIcon->ProcessList.Flink,
CURICON_PROCESS, ListEntry);
+      ASSERT(Object->ProcessList.Flink->Flink == &Object->ProcessList);
+      Current = CONTAINING_RECORD(Object->ProcessList.Flink,
CURICON_PROCESS, ListEntry);
       if (Current->Process != W32Process)
       {
          DPRINT1("Trying to destroy private icon/cursor of another
process\n");
@@ -479,8 +477,8 @@
 
    /* Now find this process in the list of processes referencing this
object and
       remove it from that list */
-   Search = CurIcon->ProcessList.Flink;
-   while (Search != &CurIcon->ProcessList)
+   Search = Object->ProcessList.Flink;
+   while (Search != &Object->ProcessList)
    {
       Current = CONTAINING_RECORD(Search, CURICON_PROCESS, ListEntry);
       if (Current->Process == W32Process)
@@ -489,12 +487,12 @@
       }
       Search = Search->Flink;
    }
-   ASSERT(Search != &CurIcon->ProcessList);
+   ASSERT(Search != &Object->ProcessList);
    RemoveEntryList(Search);
-   ExFreeToPagedLookasideList(&gProcessLookasideList, Current);
+   ExFreeToPagedLookasideList(&ProcessLookasideList, Current);
 
    /* If there are still processes referencing this object we can't
destroy it yet */
-   if (! IsListEmpty(&CurIcon->ProcessList))
+   if (! IsListEmpty(&Object->ProcessList))
    {
       return TRUE;
    }
@@ -502,21 +500,21 @@
 
    if (! ProcessCleanup)
    {
-      RemoveEntryList(&CurIcon->ListEntry);
+      RemoveEntryList(&Object->ListEntry);
    }
 
-   CurInfo = IntGetSysCursorInfo(WinSta);
+   CurInfo = IntGetSysCursorInfo(WinStaObject);
 
-   if (CurInfo->CurrentCursorObject == CurIcon)
+   if (CurInfo->CurrentCursorObject == Object)
    {
       /* Hide the cursor if we're destroying the current cursor */
-      IntSetCursor(WinSta, NULL, TRUE);
+      IntSetCursor(WinStaObject, NULL, TRUE);
    }
 
-   bmpMask = CurIcon->IconInfo.hbmMask;
-   bmpColor = CurIcon->IconInfo.hbmColor;
+   bmpMask = Object->IconInfo.hbmMask;
+   bmpColor = Object->IconInfo.hbmColor;
 
-   Ret = ObmDeleteObject(CurIcon->Self, otCursorIcon);
+   Ret = ObmDeleteObject(Object->Self, otCursor);
 
    /* delete bitmaps */
    if(bmpMask)
@@ -536,48 +534,48 @@
 VOID FASTCALL
 IntCleanupCurIcons(struct _EPROCESS *Process, PW32PROCESS Win32Process)
 {
-   PWINSTATION_OBJECT WinSta;
+   PWINSTATION_OBJECT WinStaObject;
    PLIST_ENTRY CurrentEntry;
-   PCURICON_OBJECT CurIcon;
+   PCURICON_OBJECT Object;
    PLIST_ENTRY ProcessEntry;
    PCURICON_PROCESS ProcessData;
 
-   WinSta = IntGetWinStaObj();
-   if(WinSta == NULL)
+   WinStaObject = IntGetWinStaObj();
+   if(WinStaObject == NULL)
    {
       return;
    }
 
-   CurrentEntry = gCurIconList.Flink;
-   while (CurrentEntry != &gCurIconList)
+   CurrentEntry = CurIconList.Flink;
+   while (CurrentEntry != &CurIconList)
    {
-      CurIcon = CONTAINING_RECORD(CurrentEntry, CURICON_OBJECT,
ListEntry);
+      Object = CONTAINING_RECORD(CurrentEntry, CURICON_OBJECT,
ListEntry);
       CurrentEntry = CurrentEntry->Flink;
 
 
-//      ObmReferenceObject(CurIcon);
+      ObmReferenceObject(Object);
       //    if(NT_SUCCESS(ObmReferenceObjectByPointer(Object,
otCursorIcon)))
       {
-         ProcessEntry = CurIcon->ProcessList.Flink;
-         while (ProcessEntry != &CurIcon->ProcessList)
+         ProcessEntry = Object->ProcessList.Flink;
+         while (ProcessEntry != &Object->ProcessList)
          {
             ProcessData = CONTAINING_RECORD(ProcessEntry,
CURICON_PROCESS, ListEntry);
             if (Win32Process == ProcessData->Process)
             {
-               RemoveEntryList(&CurIcon->ListEntry);
-               IntDestroyCurIconObject(WinSta, CurIcon, TRUE);
+               RemoveEntryList(&Object->ListEntry);
+               IntDestroyCurIconObject(WinStaObject, Object, TRUE);
                break;
             }
             ProcessEntry = ProcessEntry->Flink;
          }
 
-//         ObmDereferenceObject(Object);
+         ObmDereferenceObject(Object);
       }
 
 
    }
 
-   ObDereferenceObject(WinSta);
+   ObDereferenceObject(WinStaObject);
 }
 
 /*
@@ -585,10 +583,10 @@
  */
 HANDLE
 STDCALL
-NtUserCreateCursorIconHandle(PICONINFO IconInfo OPTIONAL, BOOL
Indirect)
+NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
 {
-   PCURICON_OBJECT CurIcon;
-   PWINSTATION_OBJECT WinSta;
+   PCURICON_OBJECT CurIconObject;
+   PWINSTATION_OBJECT WinStaObject;
    PBITMAPOBJ bmp;
    NTSTATUS Status;
    HANDLE Ret;
@@ -597,60 +595,61 @@
    DPRINT("Enter NtUserCreateCursorIconHandle\n");
    UserEnterExclusive();
 
-   WinSta = IntGetWinStaObj();
-   if(WinSta == NULL)
+   WinStaObject = IntGetWinStaObj();
+   if(WinStaObject == NULL)
    {
       RETURN( (HANDLE)0);
    }
 
-   if (!(CurIcon = IntCreateCurIconHandle(WinSta)))
+   CurIconObject = IntCreateCurIconHandle(WinStaObject);
+   if(CurIconObject)
    {
-      SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
-      ObDereferenceObject(WinSta);
-      RETURN( (HANDLE)0);
-   }
-   
-   Ret = CurIcon->Self;
+      Ret = CurIconObject->Self;
 
-   if(IconInfo)
-   {
-      Status = MmCopyFromCaller(&CurIcon->IconInfo, IconInfo,
sizeof(ICONINFO));
-      if(NT_SUCCESS(Status))
+      if(IconInfo)
       {
-         if(Indirect)
+         Status = MmCopyFromCaller(&CurIconObject->IconInfo, IconInfo,
sizeof(ICONINFO));
+         if(NT_SUCCESS(Status))
          {
-            CurIcon->IconInfo.hbmMask =
BITMAPOBJ_CopyBitmap(CurIcon->IconInfo.hbmMask);
-            CurIcon->IconInfo.hbmColor =
BITMAPOBJ_CopyBitmap(CurIcon->IconInfo.hbmColor);
+            if(Indirect)
+            {
+               CurIconObject->IconInfo.hbmMask =
BITMAPOBJ_CopyBitmap(CurIconObject->IconInfo.hbmMask);
+               CurIconObject->IconInfo.hbmColor =
BITMAPOBJ_CopyBitmap(CurIconObject->IconInfo.hbmColor);
+            }
+            if(CurIconObject->IconInfo.hbmColor &&
+                  (bmp =
BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor)))
+            {
+               CurIconObject->Size.cx = bmp->SurfObj.sizlBitmap.cx;
+               CurIconObject->Size.cy = bmp->SurfObj.sizlBitmap.cy;
+               BITMAPOBJ_UnlockBitmap(bmp);
+               GDIOBJ_SetOwnership(CurIconObject->IconInfo.hbmColor,
NULL);
+            }
+            if(CurIconObject->IconInfo.hbmMask &&
+                  (bmp =
BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmMask)))
+            {
+               if (CurIconObject->IconInfo.hbmColor == NULL)
+               {
+                  CurIconObject->Size.cx = bmp->SurfObj.sizlBitmap.cx;
+                  CurIconObject->Size.cy = bmp->SurfObj.sizlBitmap.cy /
2;
+               }
+               BITMAPOBJ_UnlockBitmap(bmp);
+               GDIOBJ_SetOwnership(CurIconObject->IconInfo.hbmMask,
NULL);
+            }
          }
-         if(CurIcon->IconInfo.hbmColor &&
-               (bmp =
BITMAPOBJ_LockBitmap(CurIcon->IconInfo.hbmColor)))
+         else
          {
-            CurIcon->Size.cx = bmp->SurfObj.sizlBitmap.cx;
-            CurIcon->Size.cy = bmp->SurfObj.sizlBitmap.cy;
-            BITMAPOBJ_UnlockBitmap(bmp);
-            GDIOBJ_SetOwnership(CurIcon->IconInfo.hbmColor, NULL);
+            SetLastNtError(Status);
+            /* FIXME - Don't exit here */
          }
-         if(CurIcon->IconInfo.hbmMask &&
-               (bmp = BITMAPOBJ_LockBitmap(CurIcon->IconInfo.hbmMask)))
-         {
-            if (CurIcon->IconInfo.hbmColor == NULL)
-            {
-               CurIcon->Size.cx = bmp->SurfObj.sizlBitmap.cx;
-               CurIcon->Size.cy = bmp->SurfObj.sizlBitmap.cy / 2;
-            }
-            BITMAPOBJ_UnlockBitmap(bmp);
-            GDIOBJ_SetOwnership(CurIcon->IconInfo.hbmMask, NULL);
-         }
       }
-      else
-      {
-         SetLastNtError(Status);
-         /* FIXME - Don't exit here */
-      }
+
+      ObDereferenceObject(WinStaObject);
+      RETURN( Ret);
    }
 
-   ObDereferenceObject(WinSta);
-   RETURN( Ret);
+   SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+   ObDereferenceObject(WinStaObject);
+   RETURN( (HANDLE)0);
 
 CLEANUP:
    DPRINT("Leave NtUserCreateCursorIconHandle, ret=%i\n",_ret_);
@@ -664,12 +663,12 @@
 BOOL
 STDCALL
 NtUserGetCursorIconInfo(
-   HANDLE hCurIcon,
+   HANDLE Handle,
    PICONINFO IconInfo)
 {
    ICONINFO ii;
-   PCURICON_OBJECT CurIcon;
-   PWINSTATION_OBJECT WinSta;
+   PCURICON_OBJECT CurIconObject;
+   PWINSTATION_OBJECT WinStaObject;
    NTSTATUS Status;
    BOOL Ret = FALSE;
    DECLARE_RETURN(BOOL);
@@ -677,40 +676,44 @@
    DPRINT("Enter NtUserGetCursorIconInfo\n");
    UserEnterExclusive();
 
-   if(!IconInfo)
+   WinStaObject = IntGetWinStaObj();
+   if(WinStaObject == NULL)
    {
-      SetLastWin32Error(ERROR_INVALID_PARAMETER);
-      RETURN(FALSE);
-   }
-
-   WinSta = IntGetWinStaObj();
-   if(WinSta == NULL)
-   {
       RETURN( FALSE);
    }
 
-   if (!(CurIcon = UserGetCurIconObject(hCurIcon)))
+   CurIconObject = IntGetCurIconObject(Handle);
+   if(CurIconObject)
    {
-      ObDereferenceObject(WinSta);
-      RETURN( FALSE);
-   }
-   
-   RtlCopyMemory(&ii, &CurIcon->IconInfo, sizeof(ICONINFO));
+      if(IconInfo)
+      {
+         RtlCopyMemory(&ii, &CurIconObject->IconInfo,
sizeof(ICONINFO));
 
-   /* Copy bitmaps */
-   ii.hbmMask = BITMAPOBJ_CopyBitmap(ii.hbmMask);
-   ii.hbmColor = BITMAPOBJ_CopyBitmap(ii.hbmColor);
+         /* Copy bitmaps */
+         ii.hbmMask = BITMAPOBJ_CopyBitmap(ii.hbmMask);
+         ii.hbmColor = BITMAPOBJ_CopyBitmap(ii.hbmColor);
 
-   /* Copy fields */
-   Status = MmCopyToCaller(IconInfo, &ii, sizeof(ICONINFO));
-   if(NT_SUCCESS(Status))
-      Ret = TRUE;
-   else
-      SetLastNtError(Status);
+         /* Copy fields */
+         Status = MmCopyToCaller(IconInfo, &ii, sizeof(ICONINFO));
+         if(NT_SUCCESS(Status))
+            Ret = TRUE;
+         else
+            SetLastNtError(Status);
+      }
+      else
+      {
+         SetLastWin32Error(ERROR_INVALID_PARAMETER);
+      }
 
-   ObDereferenceObject(WinSta);
-   RETURN( Ret);
+      IntReleaseCurIconObject(CurIconObject);
+      ObDereferenceObject(WinStaObject);
+      RETURN( Ret);
+   }
 
+   SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
+   ObDereferenceObject(WinStaObject);
+   RETURN( FALSE);
+
 CLEANUP:
    DPRINT("Leave NtUserGetCursorIconInfo, ret=%i\n",_ret_);
    UserLeave();
@@ -724,13 +727,13 @@
 BOOL
 STDCALL
 NtUserGetCursorIconSize(
-   HANDLE hCurIcon,
+   HANDLE Handle,
    BOOL *fIcon,
    SIZE *Size)
 {
-   PCURICON_OBJECT CurIcon;
+   PCURICON_OBJECT CurIconObject;
    PBITMAPOBJ bmp;
-   PWINSTATION_OBJECT WinSta;
+   PWINSTATION_OBJECT WinStaObject;
    NTSTATUS Status;
    BOOL Ret = FALSE;
    SIZE SafeSize;
@@ -739,44 +742,47 @@
    DPRINT("Enter NtUserGetCursorIconSize\n");
    UserEnterExclusive();
 
-   WinSta = IntGetWinStaObj();
-   if(WinSta == NULL)
+   WinStaObject = IntGetWinStaObj();
+   if(WinStaObject == NULL)
    {
       RETURN( FALSE);
    }
 
-   if (!(CurIcon = UserGetCurIconObject(hCurIcon)))
+   CurIconObject = IntGetCurIconObject(Handle);
+   if(CurIconObject)
    {
-      ObDereferenceObject(WinSta);
-      RETURN(FALSE);
-   }
-   
-   /* Copy fields */
-   Status = MmCopyToCaller(fIcon, &CurIcon->IconInfo.fIcon,
sizeof(BOOL));
-   if(!NT_SUCCESS(Status))
-   {
-      SetLastNtError(Status);
-      goto done;
-   }
+      /* Copy fields */
+      Status = MmCopyToCaller(fIcon, &CurIconObject->IconInfo.fIcon,
sizeof(BOOL));
+      if(!NT_SUCCESS(Status))
+      {
+         SetLastNtError(Status);
+         goto done;
+      }
 
-   bmp = BITMAPOBJ_LockBitmap(CurIcon->IconInfo.hbmColor);
-   if(!bmp)
-      goto done;
+      bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor);
+      if(!bmp)
+         goto done;
 
-   SafeSize.cx = bmp->SurfObj.sizlBitmap.cx;
-   SafeSize.cy = bmp->SurfObj.sizlBitmap.cy;
-   Status = MmCopyToCaller(Size, &SafeSize, sizeof(SIZE));
-   if(NT_SUCCESS(Status))
-      Ret = TRUE;
-   else
-      SetLastNtError(Status);
+      SafeSize.cx = bmp->SurfObj.sizlBitmap.cx;
+      SafeSize.cy = bmp->SurfObj.sizlBitmap.cy;
+      Status = MmCopyToCaller(Size, &SafeSize, sizeof(SIZE));
+      if(NT_SUCCESS(Status))
+         Ret = TRUE;
+      else
+         SetLastNtError(Status);
 
-   BITMAPOBJ_UnlockBitmap(bmp);
+      BITMAPOBJ_UnlockBitmap(bmp);
 
 done:
-   ObDereferenceObject(WinSta);
-   RETURN( Ret);
+      IntReleaseCurIconObject(CurIconObject);
+      ObDereferenceObject(WinStaObject);
+      RETURN( Ret);
+   }
 
+   SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
+   ObDereferenceObject(WinStaObject);
+   RETURN( FALSE);
+
 CLEANUP:
    DPRINT("Leave NtUserGetCursorIconSize, ret=%i\n",_ret_);
    UserLeave();
@@ -811,9 +817,9 @@
 {
    CURSORINFO SafeCi;
    PSYSTEM_CURSORINFO CurInfo;
-   PWINSTATION_OBJECT WinSta;
+   PWINSTATION_OBJECT WinStaObject;
    NTSTATUS Status;
-   PCURICON_OBJECT CurIcon;
+   PCURICON_OBJECT CursorObject;
    DECLARE_RETURN(BOOL);
 
    DPRINT("Enter NtUserGetCursorInfo\n");
@@ -843,29 +849,29 @@
       RETURN( FALSE);
    }
 
-   WinSta = IntGetWinStaObj();
-   if(WinSta == NULL)
+   WinStaObject = IntGetWinStaObj();
+   if(WinStaObject == NULL)
    {
       RETURN( FALSE);
    }
 
-   CurInfo = IntGetSysCursorInfo(WinSta);
-   CurIcon = (PCURICON_OBJECT)CurInfo->CurrentCursorObject;
+   CurInfo = IntGetSysCursorInfo(WinStaObject);
+   CursorObject = (PCURICON_OBJECT)CurInfo->CurrentCursorObject;
 
-   SafeCi.flags = ((CurInfo->ShowingCursor && CurIcon) ? CURSOR_SHOWING
: 0);
-   SafeCi.hCursor = (CurIcon ? (HCURSOR)CurIcon->Self : (HCURSOR)0);
+   SafeCi.flags = ((CurInfo->ShowingCursor && CursorObject) ?
CURSOR_SHOWING : 0);
+   SafeCi.hCursor = (CursorObject ? (HCURSOR)CursorObject->Self :
(HCURSOR)0);
 
-   IntGetCursorLocation(WinSta, &SafeCi.ptScreenPos);
+   IntGetCursorLocation(WinStaObject, &SafeCi.ptScreenPos);
 
    Status = MmCopyToCaller(pci, &SafeCi, sizeof(CURSORINFO));
    if(!NT_SUCCESS(Status))
    {
-      ObDereferenceObject(WinSta);
+      ObDereferenceObject(WinStaObject);
       SetLastNtError(Status);
       RETURN( FALSE);
    }
 
-   ObDereferenceObject(WinSta);
+   ObDereferenceObject(WinStaObject);
    RETURN( TRUE);
 
 CLEANUP:
@@ -885,7 +891,7 @@
 {
    /* FIXME - check if process has WINSTA_WRITEATTRIBUTES */
 
-   PWINSTATION_OBJECT WinSta;
+   PWINSTATION_OBJECT WinStaObject;
    PSYSTEM_CURSORINFO CurInfo;
    RECT Rect;
    PWINDOW_OBJECT DesktopWindow = NULL;
@@ -895,24 +901,24 @@
    DPRINT("Enter NtUserClipCursor\n");
    UserEnterExclusive();
 
-   WinSta = IntGetWinStaObj();
-   if (WinSta == NULL)
+   WinStaObject = IntGetWinStaObj();
+   if (WinStaObject == NULL)
    {
       RETURN( FALSE);
    }
 
    if (NULL != UnsafeRect && ! NT_SUCCESS(MmCopyFromCaller(&Rect,
UnsafeRect, sizeof(RECT))))
    {
-      ObDereferenceObject(WinSta);
+      ObDereferenceObject(WinStaObject);
       SetLastWin32Error(ERROR_INVALID_PARAMETER);
       RETURN( FALSE);
    }
 
-   CurInfo = IntGetSysCursorInfo(WinSta);
-   IntGetCursorLocation(WinSta, &MousePos);
+   CurInfo = IntGetSysCursorInfo(WinStaObject);
+   IntGetCursorLocation(WinStaObject, &MousePos);
 
-   if(WinSta->ActiveDesktop)
-      DesktopWindow =
UserGetWindowObject(WinSta->ActiveDesktop->DesktopWindow);
+   if(WinStaObject->ActiveDesktop)
+      DesktopWindow =
IntGetWindowObject(WinStaObject->ActiveDesktop->DesktopWindow);
 
    if((Rect.right > Rect.left) && (Rect.bottom > Rect.top)
          && DesktopWindow && UnsafeRect != NULL)
@@ -924,6 +930,7 @@
       CurInfo->CursorClipInfo.Top = max(Rect.top,
DesktopWindow->WindowRect.top);
       CurInfo->CursorClipInfo.Right = min(Rect.right - 1,
DesktopWindow->WindowRect.right - 1);
       CurInfo->CursorClipInfo.Bottom = min(Rect.bottom - 1,
DesktopWindow->WindowRect.bottom - 1);
+      IntReleaseWindowObject(DesktopWindow);
 
       mi.dx = MousePos.x;
       mi.dy = MousePos.y;
@@ -937,7 +944,7 @@
    }
 
    CurInfo->CursorClipInfo.IsClipped = FALSE;
-   ObDereferenceObject(WinSta);
+   ObDereferenceObject(WinStaObject);
 
    RETURN( TRUE);
 
@@ -954,33 +961,46 @@
 BOOL
 STDCALL
 NtUserDestroyCursorIcon(
-   HANDLE hCurIcon,
+   HANDLE Handle,
    DWORD Unknown)
 {
-   PWINSTATION_OBJECT WinSta;
-   PCURICON_OBJECT CurIcon;
-   BOOL ret;
+   PWINSTATION_OBJECT WinStaObject;
+   PCURICON_OBJECT Object;
    DECLARE_RETURN(BOOL);
 
    DPRINT("Enter NtUserDestroyCursorIcon\n");
    UserEnterExclusive();
 
-   WinSta = IntGetWinStaObj();
-   if(WinSta == NULL)
+   WinStaObject = IntGetWinStaObj();
+   if(WinStaObject == NULL)
    {
       RETURN( FALSE);
    }
 
-   if (!(CurIcon = UserGetCurIconObject(hCurIcon)))
+   if (!(Object = IntGetCurIconObject(Handle)))
    {
-      ObDereferenceObject(WinSta);
+      ObDereferenceObject(WinStaObject);
       RETURN(FALSE);
    }
+   //  Status = ObmReferenceObjectByHandle(gHandleTable, Handle,
otCursorIcon, (PVOID*)&Object);
+   //  if(!NT_SUCCESS(Status))
+   //  {
+   //    ObDereferenceObject(WinStaObject);
+   //    SetLastNtError(Status);
+   //    RETURN( FALSE);
+   //  }
[truncated at 1000 lines; 1001 more skipped] 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-cis/attachments/20050910/83e1b324/attachment.html


More information about the Ros-cis mailing list