diff --git a/reactos/win32ss/user/user32/windows/class.c b/reactos/win32ss/user/user32/windows/class.c index b76eafcc3ef..c7d0aaa15c4 100644 --- a/reactos/win32ss/user/user32/windows/class.c +++ b/reactos/win32ss/user/user32/windows/class.c @@ -241,8 +241,7 @@ VersionRegisterClass( { _SEH2_TRY { - hLibModule = GetModuleHandleW( comctl32W ); - if (!hLibModule) hLibModule = LoadLibraryW(comctl32W); + hLibModule = LoadLibraryW(comctl32W); if ( hLibModule ) { if ((pRegisterClassNameW = (void*) GetProcAddress(hLibModule, "RegisterClassNameW"))) diff --git a/reactos/win32ss/user/user32/windows/hook.c b/reactos/win32ss/user/user32/windows/hook.c index 35ea4e7bc73..82a80ccadda 100644 --- a/reactos/win32ss/user/user32/windows/hook.c +++ b/reactos/win32ss/user/user32/windows/hook.c @@ -571,8 +571,9 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) WPARAM wParam = 0; LPARAM lParam = 0; LRESULT Result = 0; - BOOL Hit = FALSE; + BOOL Hit = FALSE, Loaded = FALSE; HMODULE mod = NULL; + NTSTATUS Status = STATUS_SUCCESS; Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments; @@ -587,6 +588,10 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) { ERR("Failed to load Hook Module.\n"); } + else + { + Loaded = TRUE; // Free it only when loaded. + } } if (mod) { @@ -634,7 +639,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) lParam = Common->lParam; break; default: - if (mod) FreeLibrary(mod); + if (Loaded) FreeLibrary(mod); ERR("HCBT_ not supported = %d\n", Common->Code); return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED); } @@ -758,15 +763,16 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) _SEH2_END; break; default: - if (mod) FreeLibrary(mod); + if (Loaded) FreeLibrary(mod); return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED); } if (Hit) { ERR("Hook Exception! Id: %d, Code %d, Proc 0x%x\n",Common->HookId,Common->Code,Proc); + Status = STATUS_UNSUCCESSFUL; } - if (mod) FreeLibrary(mod); - return ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS); + if (Loaded) FreeLibrary(mod); + return ZwCallbackReturn(&Result, sizeof(LRESULT), Status); } NTSTATUS WINAPI