- Fix crash while closing global hooked application. See CORE-10549.

svn path=/trunk/; revision=69945
This commit is contained in:
James Tabor 2015-11-20 08:22:20 +00:00
parent 24d2342e66
commit 4d9fdd8b69
2 changed files with 12 additions and 3 deletions

View file

@ -647,7 +647,13 @@ co_IntCallHookProc(INT HookId,
Common->offPfn = offPfn;
Common->Ansi = Ansi;
RtlZeroMemory(&Common->ModuleName, sizeof(Common->ModuleName));
RtlCopyMemory(&Common->ModuleName, ModuleName->Buffer, ModuleName->Length);
if (ModuleName->Buffer && ModuleName->Length)
{
RtlCopyMemory(&Common->ModuleName, ModuleName->Buffer, ModuleName->Length);
// If ModuleName->Buffer NULL while in destroy,
// this will make User32:Hook.c complain about not loading the library module.
// Fix symptom for CORE-10549.
}
Extra = (PCHAR) Common + sizeof(HOOKPROC_CALLBACK_ARGUMENTS);
switch(HookId)
@ -738,7 +744,7 @@ co_IntCallHookProc(INT HookId,
if (!NT_SUCCESS(Status))
{
ERR("Failure to make Callback! Status 0x%x",Status);
ERR("Failure to make Callback! Status 0x%x\n",Status);
goto Fault_Exit;
}

View file

@ -342,6 +342,9 @@ co_CallHook( INT HookId,
case WH_KEYBOARD:
break;
}
if (!UserObjectInDestroy(UserHMGetHandle(phk))) //// Fix CORE-10549.
{
/* The odds are high for this to be a Global call. */
Result = co_IntCallHookProc( HookId,
Code,
@ -352,7 +355,7 @@ co_CallHook( INT HookId,
phk->offPfn,
phk->Ansi,
&phk->ModuleName);
}
/* The odds so high, no one is waiting for the results. */
if (pHP->pHookStructs) ExFreePoolWithTag(pHP->pHookStructs, TAG_HOOK);
ExFreePoolWithTag(pHP, TAG_HOOK);