- Use LoadLibrary and only free it only when loaded.

svn path=/trunk/; revision=60862
This commit is contained in:
James Tabor 2013-11-04 01:31:19 +00:00
parent 821b74d168
commit d6132d4c02
2 changed files with 12 additions and 7 deletions

View file

@ -241,8 +241,7 @@ VersionRegisterClass(
{ {
_SEH2_TRY _SEH2_TRY
{ {
hLibModule = GetModuleHandleW( comctl32W ); hLibModule = LoadLibraryW(comctl32W);
if (!hLibModule) hLibModule = LoadLibraryW(comctl32W);
if ( hLibModule ) if ( hLibModule )
{ {
if ((pRegisterClassNameW = (void*) GetProcAddress(hLibModule, "RegisterClassNameW"))) if ((pRegisterClassNameW = (void*) GetProcAddress(hLibModule, "RegisterClassNameW")))

View file

@ -571,8 +571,9 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
WPARAM wParam = 0; WPARAM wParam = 0;
LPARAM lParam = 0; LPARAM lParam = 0;
LRESULT Result = 0; LRESULT Result = 0;
BOOL Hit = FALSE; BOOL Hit = FALSE, Loaded = FALSE;
HMODULE mod = NULL; HMODULE mod = NULL;
NTSTATUS Status = STATUS_SUCCESS;
Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments; Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments;
@ -587,6 +588,10 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
{ {
ERR("Failed to load Hook Module.\n"); ERR("Failed to load Hook Module.\n");
} }
else
{
Loaded = TRUE; // Free it only when loaded.
}
} }
if (mod) if (mod)
{ {
@ -634,7 +639,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
lParam = Common->lParam; lParam = Common->lParam;
break; break;
default: default:
if (mod) FreeLibrary(mod); if (Loaded) FreeLibrary(mod);
ERR("HCBT_ not supported = %d\n", Common->Code); ERR("HCBT_ not supported = %d\n", Common->Code);
return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED); return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED);
} }
@ -758,15 +763,16 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
_SEH2_END; _SEH2_END;
break; break;
default: default:
if (mod) FreeLibrary(mod); if (Loaded) FreeLibrary(mod);
return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED); return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED);
} }
if (Hit) if (Hit)
{ {
ERR("Hook Exception! Id: %d, Code %d, Proc 0x%x\n",Common->HookId,Common->Code,Proc); ERR("Hook Exception! Id: %d, Code %d, Proc 0x%x\n",Common->HookId,Common->Code,Proc);
Status = STATUS_UNSUCCESSFUL;
} }
if (mod) FreeLibrary(mod); if (Loaded) FreeLibrary(mod);
return ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS); return ZwCallbackReturn(&Result, sizeof(LRESULT), Status);
} }
NTSTATUS WINAPI NTSTATUS WINAPI