- 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
{
hLibModule = GetModuleHandleW( comctl32W );
if (!hLibModule) hLibModule = LoadLibraryW(comctl32W);
hLibModule = LoadLibraryW(comctl32W);
if ( hLibModule )
{
if ((pRegisterClassNameW = (void*) GetProcAddress(hLibModule, "RegisterClassNameW")))

View 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