{
ULONG ArgumentLength;
PVOID Argument;
- LRESULT Result;
+ LRESULT Result = 0;
NTSTATUS Status;
PVOID ResultPointer;
ULONG ResultLength;
case WH_MOUSE_LL:
ArgumentLength += sizeof(MSLLHOOKSTRUCT);
break;
+ case WH_MOUSE:
+ ArgumentLength += sizeof(MOUSEHOOKSTRUCT);
+ break;
+ case WH_CALLWNDPROC:
+ ArgumentLength += sizeof(CWPSTRUCT);
+ break;
+ case WH_CALLWNDPROCRET:
+ ArgumentLength += sizeof(CWPRETSTRUCT);
+ break;
case WH_MSGFILTER:
case WH_SYSMSGFILTER:
case WH_GETMESSAGE:
ArgumentLength += sizeof(MSG);
break;
+ case WH_KEYBOARD:
// case WH_SHELL:
-// break;
+ break;
default:
DPRINT1("Trying to call unsupported window hook %d\n", HookId);
return 0;
{
RtlCopyMemory(Extra, ClassName->Buffer, ClassName->Length);
CbtCreatewndExtra->Cs.lpszClass =
- (LPCWSTR) MAKELONG(Extra - (PCHAR) CbtCreatewndExtra, 1);
+ (LPCWSTR)(ULONG_PTR) MAKELONG(Extra - (PCHAR) CbtCreatewndExtra, 1);
Extra += ClassName->Length;
*((WCHAR *) Extra) = L'\0';
}
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(MSLLHOOKSTRUCT));
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
break;
+ case WH_MOUSE:
+ RtlCopyMemory(Extra, (PVOID) lParam, sizeof(MOUSEHOOKSTRUCT));
+ Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
+ break;
+ case WH_CALLWNDPROC:
+ RtlCopyMemory(Extra, (PVOID) lParam, sizeof(CWPSTRUCT));
+ Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
+ break;
+ case WH_CALLWNDPROCRET:
+ RtlCopyMemory(Extra, (PVOID) lParam, sizeof(CWPRETSTRUCT));
+ Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
+ break;
case WH_MSGFILTER:
case WH_SYSMSGFILTER:
case WH_GETMESSAGE:
RtlCopyMemory(Extra, (PVOID) lParam, sizeof(MSG));
Common->lParam = (LPARAM) (Extra - (PCHAR) Common);
- DPRINT1("KHOOK Memory: %x\n",Common);
+// DPRINT1("KHOOK Memory: %x\n",Common);
+ break;
+ case WH_KEYBOARD:
break;
// case WH_SHELL:
// Extra = lParam;
-// break;
+ break;
}
ResultPointer = NULL;
&ResultPointer,
&ResultLength);
- /* Simulate old behaviour: copy into our local buffer */
- Result = *(LRESULT*)ResultPointer;
-
UserEnterCo();
+ _SEH_TRY
+ {
+ ProbeForRead((PVOID)*(LRESULT*)ResultPointer,
+ sizeof(LRESULT),
+ 1);
+ /* Simulate old behaviour: copy into our local buffer */
+ Result = *(LRESULT*)ResultPointer;
+ }
+ _SEH_HANDLE
+ {
+ Result = 0;
+ }
+ _SEH_END;
+
IntCbFreeMemory(Argument);
if (!NT_SUCCESS(Status))
IntRestoreTebWndCallback (hWnd, pWnd);
IntCbFreeMemory(Argument);
-
+
if (!NT_SUCCESS(Status))
{
return 0;