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;
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;
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;
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;
return 0;
}
+ if (HookId == WH_CBT && Code == HCBT_CREATEWND)
+ {
+ if (CbtCreatewndExtra)
+ {
+ CbtCreateWnd->hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
+ }
+ }
+
if (Argument) IntCbFreeMemory(Argument);
return Result;
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:
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;
}