- Prevent kernel bug check in win32k when calling a hook proc when thread is in cleanup.

- This is not a hack and not a fix. Please retest related bug report applications. Tested Firefox 3.5 and the new putty. Need new debug print outs. ATM Ff 3.5 send out WH_JOURNALRECORD hook calls when the thread is in cleanup. Look like this: Thread is in cleanup and trying to call hook 0
- Reference bug 4298.

svn path=/trunk/; revision=43259
This commit is contained in:
James Tabor
2009-10-03 02:30:47 +00:00
parent f187acf5ef
commit 68180a507a
3 changed files with 11 additions and 2 deletions
@@ -16,8 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id$
*
/*
* Entry Point for win32k.sys
*/
@@ -285,6 +284,7 @@ Win32kThreadCallback(struct _ETHREAD *Thread,
DPRINT("Destroying W32 thread TID:%d at IRQ level: %lu\n", Thread->Cid.UniqueThread, KeGetCurrentIrql());
Win32Thread->IsExiting = TRUE;
Win32Thread->TIF_flags |= TIF_INCLEANUP;
HOOK_DestroyThreadHooks(Thread);
UnregisterThreadHotKeys(Thread);
/* what if this co_ func crash in umode? what will clean us up then? */
@@ -326,6 +326,14 @@ co_IntCallHookProc(INT HookId,
UNICODE_STRING ClassName;
PANSI_STRING asWindowName;
PANSI_STRING asClassName;
PTHREADINFO pti;
pti = PsGetCurrentThreadWin32Thread();
if (pti->TIF_flags & TIF_INCLEANUP)
{
DPRINT1("Thread is in cleanup and trying to call hook %d\n", Code);
return 0;
}
ArgumentLength = sizeof(HOOKPROC_CALLBACK_ARGUMENTS) - sizeof(WCHAR)
+ ModuleName->Length;
@@ -425,6 +425,7 @@ static LRESULT co_UserFreeWindow(PWINDOW_OBJECT Window,
co_IntSendMessage(Window->hSelf, WM_NCDESTROY, 0, 0);
}
MsqRemoveTimersWindow(ThreadData->MessageQueue, Window->hSelf);
HOOK_DestroyThreadHooks(ThreadData->pEThread); // This is needed here too!
/* flush the message queue */
MsqRemoveWindowMessagesFromQueue(Window);