diff --git a/reactos/dll/win32/user32/windows/hook.c b/reactos/dll/win32/user32/windows/hook.c index d992ed390cb..f5bff7b4da0 100644 --- a/reactos/dll/win32/user32/windows/hook.c +++ b/reactos/dll/win32/user32/windows/hook.c @@ -412,10 +412,8 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) LRESULT Result; CREATESTRUCTW Csw; CBT_CREATEWNDW CbtCreatewndw; - UNICODE_STRING UString; CREATESTRUCTA Csa; CBT_CREATEWNDA CbtCreatewnda; - ANSI_STRING AString; PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra; WPARAM wParam; LPARAM lParam; @@ -451,18 +449,6 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) if (Common->Ansi) { memcpy(&Csa, &Csw, sizeof(CREATESTRUCTW)); - if (NULL != Csw.lpszName) - { - RtlInitUnicodeString(&UString, Csw.lpszName); - RtlUnicodeStringToAnsiString(&AString, &UString, TRUE); - Csa.lpszName = AString.Buffer; - } - if (0 != HIWORD(Csw.lpszClass)) - { - RtlInitUnicodeString(&UString, Csw.lpszClass); - RtlUnicodeStringToAnsiString(&AString, &UString, TRUE); - Csa.lpszClass = AString.Buffer; - } CbtCreatewnda.lpcs = &Csa; CbtCreatewnda.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter; lParam = (LPARAM) &CbtCreatewnda; @@ -478,22 +464,17 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED); } - Result = Common->Proc(Common->Code, wParam, lParam); + if (Common->Proc) + Result = Common->Proc(Common->Code, wParam, lParam); + else + { + ERR("Common = 0x%x, Proc = 0x%x\n",Common,Common->Proc); + } switch(Common->Code) { case HCBT_CREATEWND: - if (Common->Ansi) - { - if (0 != HIWORD(Csa.lpszClass)) - { - RtlFreeHeap(GetProcessHeap(), 0, (LPSTR) Csa.lpszClass); - } - if (NULL != Csa.lpszName) - { - RtlFreeHeap(GetProcessHeap(), 0, (LPSTR) Csa.lpszName); - } - } + CbtCreatewndExtra->WndInsertAfter = CbtCreatewndw.hwndInsertAfter; break; } break; diff --git a/reactos/subsystems/win32/win32k/include/win32.h b/reactos/subsystems/win32/win32k/include/win32.h index 3f684637ba2..01de1162639 100644 --- a/reactos/subsystems/win32/win32k/include/win32.h +++ b/reactos/subsystems/win32/win32k/include/win32.h @@ -43,6 +43,7 @@ typedef struct _THREADINFO UINT cPaintsReady; /* Count of paints pending. */ UINT cTimersReady; /* Count of timers pending. */ ULONG fsHooks; + PHOOK sphkCurrent; LIST_ENTRY PtiLink; CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL. diff --git a/reactos/subsystems/win32/win32k/ntuser/callback.c b/reactos/subsystems/win32/win32k/ntuser/callback.c index ed9dc82fa8f..94e712b7fb4 100644 --- a/reactos/subsystems/win32/win32k/ntuser/callback.c +++ b/reactos/subsystems/win32/win32k/ntuser/callback.c @@ -346,7 +346,7 @@ co_IntCallHookProc(INT HookId, PHOOKPROC_CALLBACK_ARGUMENTS Common; CBT_CREATEWNDW *CbtCreateWnd =NULL; PCHAR Extra; - PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra ; + PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra = NULL; UNICODE_STRING WindowName; UNICODE_STRING ClassName; PANSI_STRING asWindowName; @@ -546,6 +546,14 @@ co_IntCallHookProc(INT HookId, return 0; } + if (HookId == WH_CBT && Code == HCBT_CREATEWND) + { + if (CbtCreatewndExtra) + { + CbtCreateWnd->hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter; + } + } + if (Argument) IntCbFreeMemory(Argument); return Result; diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 9bafa824760..e76c04be93e 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -529,7 +529,7 @@ IntCallDebugHook(PHOOK Hook, case HCBT_CREATEWND: /* Handle Ansi? */ Size = sizeof(CBT_CREATEWND); - /* What shall we do? Size += sizeof(HOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS); same ass CREATESTRUCTEX */ + /* What shall we do? Size += sizeof(HOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS); same as CREATESTRUCTEX */ break; default: @@ -845,9 +845,9 @@ UserCallNextHookEx(PHOOK Hook, DPRINT1("HOOK HCBT_CREATEWND write ERROR!\n"); } /* The next call handles the structures. */ - if (!BadChk) + if (!BadChk && Hook->Proc) { -// lResult = co_HOOK_CallHookNext(Hook, Code, wParam, lParam); + lResult = co_HOOK_CallHookNext(Hook, Code, wParam, lParam); } break; }