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)
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;
}
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,
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);