[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