-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-08 23:10:17 UTC (rev 17755)
+++ trunk/reactos/subsys/win32k/include/object.h	2005-09-09 00:25:52 UTC (rev 17756)
@@ -42,7 +42,7 @@
   otWindow,
   otMenu,
   otAccel,
-  otCursor,
+  otCursorIcon,
   otHook,
   otMonitor,
   otClass //fixme: remove

Modified: trunk/reactos/subsys/win32k/include/userfuncs.h
--- trunk/reactos/subsys/win32k/include/userfuncs.h	2005-09-08 23:10:17 UTC (rev 17755)
+++ trunk/reactos/subsys/win32k/include/userfuncs.h	2005-09-09 00:25:52 UTC (rev 17756)
@@ -21,6 +21,8 @@
 
 #define IntReferenceWindowObject(o) ObmReferenceObject(o)
 
+#define UserDerefObject(o) ObmReferenceObject(o)
+
 VOID FASTCALL IntReleaseWindowObject(PWINDOW_OBJECT Window);
 PWINDOW_OBJECT FASTCALL IntGetWindowObject(HWND hWnd);
 PVOID FASTCALL
@@ -136,7 +138,7 @@
 
 LONG FASTCALL UserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi);
 
-HWND FASTCALL UserGetAncestor(HWND hWnd, UINT Type);
+PWINDOW_OBJECT FASTCALL UserGetAncestor(PWINDOW_OBJECT Wnd, UINT Type);
 
 /*************** MENU.C ***************/
 

Modified: trunk/reactos/subsys/win32k/ntuser/caret.c
--- trunk/reactos/subsys/win32k/ntuser/caret.c	2005-09-08 23:10:17 UTC (rev 17755)
+++ trunk/reactos/subsys/win32k/ntuser/caret.c	2005-09-09 00:25:52 UTC (rev 17756)
@@ -317,11 +317,13 @@
 }
 
 
-BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT Window)
+BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT Window OPTIONAL)
 {
    PUSER_MESSAGE_QUEUE ThreadQueue;
 
-   if(Window->OwnerThread != PsGetCurrentThread())
+   if (Window) ASSERT_REFS_CO(Window);
+
+   if(Window && Window->OwnerThread != PsGetCurrentThread())
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -329,7 +331,7 @@
 
    ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
 
-   if(ThreadQueue->CaretInfo->hWnd != Window->hSelf)
+   if(Window && ThreadQueue->CaretInfo->hWnd != Window->hSelf)
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -337,7 +339,7 @@
 
    if(ThreadQueue->CaretInfo->Visible)
    {
-      IntKillTimer(Window->hSelf, IDCARETTIMER, TRUE);
+      IntKillTimer((Window ? Window->hSelf : 0), IDCARETTIMER, TRUE);
 
       co_IntHideCaret(ThreadQueue->CaretInfo);
       ThreadQueue->CaretInfo->Visible = 0;
@@ -350,24 +352,23 @@
 
 BOOL
 STDCALL
-NtUserHideCaret(
-   HWND hWnd)
+NtUserHideCaret(HWND hWnd OPTIONAL)
 {
-   PWINDOW_OBJECT Window;
+   PWINDOW_OBJECT Window = NULL;
    DECLARE_RETURN(BOOL);
    BOOL ret;
 
    DPRINT("Enter NtUserHideCaret\n");
    UserEnterExclusive();
 
-   if(!(Window = UserGetWindowObject(hWnd)))
+   if(hWnd && !(Window = UserGetWindowObject(hWnd)))
    {
       RETURN(FALSE);
    }
 
-   UserRefObjectCo(Window);
+   if (Window) UserRefObjectCo(Window);
    ret = co_UserHideCaret(Window);
-   UserDerefObjectCo(Window);
+   if (Window) UserDerefObjectCo(Window);
 
    RETURN(ret);
 
@@ -378,11 +379,13 @@
 }
 
 
-BOOL FASTCALL co_UserShowCaret(PWINDOW_OBJECT Window)
+BOOL FASTCALL co_UserShowCaret(PWINDOW_OBJECT Window OPTIONAL)
 {
    PUSER_MESSAGE_QUEUE ThreadQueue;
 
-   if(Window->OwnerThread != PsGetCurrentThread())
+   if (Window) ASSERT_REFS_CO(Window);
+
+   if(Window && Window->OwnerThread != PsGetCurrentThread())
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -390,7 +393,7 @@
 
    ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
 
-   if(ThreadQueue->CaretInfo->hWnd != Window->hSelf)
+   if(Window && ThreadQueue->CaretInfo->hWnd != Window->hSelf)
    {
       SetLastWin32Error(ERROR_ACCESS_DENIED);
       return FALSE;
@@ -403,7 +406,7 @@
       {
          co_IntSendMessage(ThreadQueue->CaretInfo->hWnd, WM_SYSTIMER, IDCARETTIMER, 0);
       }
-      IntSetTimer(Window->hSelf, IDCARETTIMER, IntGetCaretBlinkTime(), NULL, TRUE);
+      IntSetTimer((Window ? Window->hSelf : 0), IDCARETTIMER, IntGetCaretBlinkTime(), NULL, TRUE);
    }
 
    return TRUE;
@@ -412,24 +415,23 @@
 
 BOOL
 STDCALL
-NtUserShowCaret(
-   HWND hWnd)
+NtUserShowCaret(HWND hWnd OPTIONAL)
 {
-   PWINDOW_OBJECT Window;
+   PWINDOW_OBJECT Window = NULL;
    DECLARE_RETURN(BOOL);
    BOOL ret;
 
    DPRINT("Enter NtUserShowCaret\n");
    UserEnterExclusive();
 
-   if(!(Window = UserGetWindowObject(hWnd)))
+   if(hWnd && !(Window = UserGetWindowObject(hWnd)))
    {
       RETURN(FALSE);
    }
 
-   UserRefObjectCo(Window);
+   if (Window) UserRefObjectCo(Window);
    ret = co_UserShowCaret(Window);
-   UserDerefObjectCo(Window);
+   if (Window) UserDerefObjectCo(Window);
 
    RETURN(ret);
 

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