mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
- Fix breakage when in HCBT_CREATEWND callback.
svn path=/trunk/; revision=41617
This commit is contained in:
parent
336fb5e2d6
commit
f69cbf46cc
4 changed files with 20 additions and 30 deletions
|
@ -412,10 +412,8 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
LRESULT Result;
|
LRESULT Result;
|
||||||
CREATESTRUCTW Csw;
|
CREATESTRUCTW Csw;
|
||||||
CBT_CREATEWNDW CbtCreatewndw;
|
CBT_CREATEWNDW CbtCreatewndw;
|
||||||
UNICODE_STRING UString;
|
|
||||||
CREATESTRUCTA Csa;
|
CREATESTRUCTA Csa;
|
||||||
CBT_CREATEWNDA CbtCreatewnda;
|
CBT_CREATEWNDA CbtCreatewnda;
|
||||||
ANSI_STRING AString;
|
|
||||||
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra;
|
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra;
|
||||||
WPARAM wParam;
|
WPARAM wParam;
|
||||||
LPARAM lParam;
|
LPARAM lParam;
|
||||||
|
@ -451,18 +449,6 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
if (Common->Ansi)
|
if (Common->Ansi)
|
||||||
{
|
{
|
||||||
memcpy(&Csa, &Csw, sizeof(CREATESTRUCTW));
|
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.lpcs = &Csa;
|
||||||
CbtCreatewnda.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
|
CbtCreatewnda.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
|
||||||
lParam = (LPARAM) &CbtCreatewnda;
|
lParam = (LPARAM) &CbtCreatewnda;
|
||||||
|
@ -478,22 +464,17 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED);
|
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)
|
switch(Common->Code)
|
||||||
{
|
{
|
||||||
case HCBT_CREATEWND:
|
case HCBT_CREATEWND:
|
||||||
if (Common->Ansi)
|
CbtCreatewndExtra->WndInsertAfter = CbtCreatewndw.hwndInsertAfter;
|
||||||
{
|
|
||||||
if (0 != HIWORD(Csa.lpszClass))
|
|
||||||
{
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, (LPSTR) Csa.lpszClass);
|
|
||||||
}
|
|
||||||
if (NULL != Csa.lpszName)
|
|
||||||
{
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, (LPSTR) Csa.lpszName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -43,6 +43,7 @@ typedef struct _THREADINFO
|
||||||
UINT cPaintsReady; /* Count of paints pending. */
|
UINT cPaintsReady; /* Count of paints pending. */
|
||||||
UINT cTimersReady; /* Count of timers pending. */
|
UINT cTimersReady; /* Count of timers pending. */
|
||||||
ULONG fsHooks;
|
ULONG fsHooks;
|
||||||
|
PHOOK sphkCurrent;
|
||||||
LIST_ENTRY PtiLink;
|
LIST_ENTRY PtiLink;
|
||||||
|
|
||||||
CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL.
|
CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL.
|
||||||
|
|
|
@ -346,7 +346,7 @@ co_IntCallHookProc(INT HookId,
|
||||||
PHOOKPROC_CALLBACK_ARGUMENTS Common;
|
PHOOKPROC_CALLBACK_ARGUMENTS Common;
|
||||||
CBT_CREATEWNDW *CbtCreateWnd =NULL;
|
CBT_CREATEWNDW *CbtCreateWnd =NULL;
|
||||||
PCHAR Extra;
|
PCHAR Extra;
|
||||||
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra ;
|
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra = NULL;
|
||||||
UNICODE_STRING WindowName;
|
UNICODE_STRING WindowName;
|
||||||
UNICODE_STRING ClassName;
|
UNICODE_STRING ClassName;
|
||||||
PANSI_STRING asWindowName;
|
PANSI_STRING asWindowName;
|
||||||
|
@ -546,6 +546,14 @@ co_IntCallHookProc(INT HookId,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HookId == WH_CBT && Code == HCBT_CREATEWND)
|
||||||
|
{
|
||||||
|
if (CbtCreatewndExtra)
|
||||||
|
{
|
||||||
|
CbtCreateWnd->hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Argument) IntCbFreeMemory(Argument);
|
if (Argument) IntCbFreeMemory(Argument);
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
|
|
|
@ -529,7 +529,7 @@ IntCallDebugHook(PHOOK Hook,
|
||||||
|
|
||||||
case HCBT_CREATEWND: /* Handle Ansi? */
|
case HCBT_CREATEWND: /* Handle Ansi? */
|
||||||
Size = sizeof(CBT_CREATEWND);
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -845,9 +845,9 @@ UserCallNextHookEx(PHOOK Hook,
|
||||||
DPRINT1("HOOK HCBT_CREATEWND write ERROR!\n");
|
DPRINT1("HOOK HCBT_CREATEWND write ERROR!\n");
|
||||||
}
|
}
|
||||||
/* The next call handles the structures. */
|
/* 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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue