- Use LoadLibrary and only free it only when loaded.
authorJames Tabor <james.tabor@reactos.org>
Mon, 4 Nov 2013 01:31:19 +0000 (01:31 +0000)
committerJames Tabor <james.tabor@reactos.org>
Mon, 4 Nov 2013 01:31:19 +0000 (01:31 +0000)
svn path=/trunk/; revision=60862

reactos/win32ss/user/user32/windows/class.c
reactos/win32ss/user/user32/windows/hook.c

index b76eafc..c7d0aaa 100644 (file)
@@ -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")))
index 35ea4e7..82a80cc 100644 (file)
@@ -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