From acd5c47c18c56e5e4e4908fdfc6fc137be13f858 Mon Sep 17 00:00:00 2001 From: Gunnar Dalsnes Date: Mon, 19 Sep 2005 00:02:39 +0000 Subject: [PATCH] -set last error (invalid handle) in cases where handle is NULL also -remove GvG's workaround svn path=/trunk/; revision=17924 --- reactos/subsys/win32k/ntuser/accelerator.c | 20 +++++++++++--------- reactos/subsys/win32k/ntuser/cursoricon.c | 6 +++++- reactos/subsys/win32k/ntuser/hook.c | 21 ++++++++++++++------- reactos/subsys/win32k/ntuser/hotkey.c | 4 ++++ reactos/subsys/win32k/ntuser/menu.c | 10 +++++++++- reactos/subsys/win32k/ntuser/monitor.c | 11 ++++++++++- reactos/subsys/win32k/ntuser/window.c | 7 +++++-- 7 files changed, 58 insertions(+), 21 deletions(-) diff --git a/reactos/subsys/win32k/ntuser/accelerator.c b/reactos/subsys/win32k/ntuser/accelerator.c index a39bfb7a04b..138a135f25a 100644 --- a/reactos/subsys/win32k/ntuser/accelerator.c +++ b/reactos/subsys/win32k/ntuser/accelerator.c @@ -74,18 +74,20 @@ PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hAccel) { PACCELERATOR_TABLE Accel; - if (!hAccel) return NULL; - - Accel= UserGetObject(&gHandleTable, hAccel, otAccel); - - if (Accel) - { - ASSERT(USER_BODY_TO_HEADER(Accel)->RefCount >= 0); - } - else + if (!hAccel) { SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE); + return NULL; } + + Accel= UserGetObject(&gHandleTable, hAccel, otAccel); + if (!Accel) + { + SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE); + return NULL; + } + + ASSERT(USER_BODY_TO_HEADER(Accel)->RefCount >= 0); return Accel; } diff --git a/reactos/subsys/win32k/ntuser/cursoricon.c b/reactos/subsys/win32k/ntuser/cursoricon.c index bfcfd5bcf66..c4c843c710e 100644 --- a/reactos/subsys/win32k/ntuser/cursoricon.c +++ b/reactos/subsys/win32k/ntuser/cursoricon.c @@ -77,7 +77,11 @@ PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon) { PCURICON_OBJECT CurIcon; - if (!hCurIcon) return NULL; + if (!hCurIcon) + { + SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE); + return NULL; + } CurIcon = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCurIcon, otCursorIcon); if (!CurIcon) diff --git a/reactos/subsys/win32k/ntuser/hook.c b/reactos/subsys/win32k/ntuser/hook.c index 79b81855689..5948ae683bb 100644 --- a/reactos/subsys/win32k/ntuser/hook.c +++ b/reactos/subsys/win32k/ntuser/hook.c @@ -59,21 +59,28 @@ IntAllocHookTable(void) } -PHOOK FASTCALL IntGetHookObject(HHOOK hWnd) +PHOOK FASTCALL IntGetHookObject(HHOOK hHook) { - - PHOOK Window = (PHOOK)UserGetObject(&gHandleTable, hWnd, otHook); - if (!Window) + PHOOK Hook; + + if (!hHook) + { + SetLastWin32Error(ERROR_INVALID_HOOK_HANDLE); + return NULL; + } + + Hook = (PHOOK)UserGetObject(&gHandleTable, hHook, otHook); + if (!Hook) { SetLastWin32Error(ERROR_INVALID_HOOK_HANDLE); return NULL; } - ASSERT(USER_BODY_TO_HEADER(Window)->RefCount >= 0); + ASSERT(USER_BODY_TO_HEADER(Hook)->RefCount >= 0); - USER_BODY_TO_HEADER(Window)->RefCount++; + USER_BODY_TO_HEADER(Hook)->RefCount++; - return Window; + return Hook; } diff --git a/reactos/subsys/win32k/ntuser/hotkey.c b/reactos/subsys/win32k/ntuser/hotkey.c index c27cf6c8fe5..915c5def0cb 100644 --- a/reactos/subsys/win32k/ntuser/hotkey.c +++ b/reactos/subsys/win32k/ntuser/hotkey.c @@ -154,6 +154,10 @@ IsHotKey (UINT fsModifiers, UINT vk) } + +/* SYSCALLS *****************************************************************/ + + BOOL STDCALL NtUserRegisterHotKey(HWND hWnd, int id, diff --git a/reactos/subsys/win32k/ntuser/menu.c b/reactos/subsys/win32k/ntuser/menu.c index 8c2132952d0..8abfaef29d8 100644 --- a/reactos/subsys/win32k/ntuser/menu.c +++ b/reactos/subsys/win32k/ntuser/menu.c @@ -115,7 +115,15 @@ CleanupMenuImpl(VOID) PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu) { - PMENU_OBJECT Menu = (PMENU_OBJECT)UserGetObject(&gHandleTable, hMenu, otMenu); + PMENU_OBJECT Menu; + + if (!hMenu) + { + SetLastWin32Error(ERROR_INVALID_MENU_HANDLE); + return NULL; + } + + Menu = (PMENU_OBJECT)UserGetObject(&gHandleTable, hMenu, otMenu); if (!Menu) { SetLastWin32Error(ERROR_INVALID_MENU_HANDLE); diff --git a/reactos/subsys/win32k/ntuser/monitor.c b/reactos/subsys/win32k/ntuser/monitor.c index 6ae7b6f0cb7..10f9828d4ed 100644 --- a/reactos/subsys/win32k/ntuser/monitor.c +++ b/reactos/subsys/win32k/ntuser/monitor.c @@ -124,7 +124,16 @@ static PMONITOR_OBJECT FASTCALL UserGetMonitorObject(IN HMONITOR hMonitor) { - PMONITOR_OBJECT Monitor = (PMONITOR_OBJECT)UserGetObject(&gHandleTable, hMonitor, otMonitor); + PMONITOR_OBJECT Monitor; + + if (!hMonitor) + { + SetLastWin32Error(ERROR_INVALID_MONITOR_HANDLE); + return NULL; + } + + + Monitor = (PMONITOR_OBJECT)UserGetObject(&gHandleTable, hMonitor, otMonitor); if (!Monitor) { SetLastWin32Error(ERROR_INVALID_MONITOR_HANDLE); diff --git a/reactos/subsys/win32k/ntuser/window.c b/reactos/subsys/win32k/ntuser/window.c index 84eba3524c8..ce6445c23df 100644 --- a/reactos/subsys/win32k/ntuser/window.c +++ b/reactos/subsys/win32k/ntuser/window.c @@ -97,7 +97,11 @@ PWINDOW_OBJECT FASTCALL UserGetWindowObject(HWND hWnd) { PWINDOW_OBJECT Window; - if (!hWnd) return NULL; + if (!hWnd) + { + SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); + return NULL; + } Window = (PWINDOW_OBJECT)UserGetObject(&gHandleTable, hWnd, otWindow); if (!Window || 0 != (Window->Status & WINDOWSTATUS_DESTROYED)) @@ -3233,7 +3237,6 @@ UserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi) if (!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); return 0; }