- Formatting fix. No code change

svn path=/trunk/; revision=41042
This commit is contained in:
Dmitry Chapyshev 2009-05-22 12:50:31 +00:00
parent 90e41cf673
commit 5826eb2c18

View file

@ -22,7 +22,8 @@ static PHOOKTABLE GlobalHooks;
/* create a new hook table */
static PHOOKTABLE
static
PHOOKTABLE
IntAllocHookTable(void)
{
PHOOKTABLE Table;
@ -42,7 +43,9 @@ IntAllocHookTable(void)
}
PHOOK FASTCALL IntGetHookObject(HHOOK hHook)
PHOOK
FASTCALL
IntGetHookObject(HHOOK hHook)
{
PHOOK Hook;
@ -69,7 +72,8 @@ PHOOK FASTCALL IntGetHookObject(HHOOK hHook)
/* create a new hook and add it to the specified table */
static PHOOK
static
PHOOK
IntAddHook(PETHREAD Thread, int HookId, BOOLEAN Global, PWINSTATION_OBJECT WinStaObj)
{
PTHREADINFO W32Thread;
@ -124,7 +128,9 @@ IntAddHook(PETHREAD Thread, int HookId, BOOLEAN Global, PWINSTATION_OBJECT WinSt
}
/* get the hook table that a given hook belongs to */
static PHOOKTABLE FASTCALL
static
PHOOKTABLE
FASTCALL
IntGetTable(PHOOK Hook)
{
if (NULL == Hook->Thread || WH_KEYBOARD_LL == Hook->HookId ||
@ -137,22 +143,28 @@ IntGetTable(PHOOK Hook)
}
/* get the first hook in the chain */
static PHOOK FASTCALL
static
PHOOK
FASTCALL
IntGetFirstHook(PHOOKTABLE Table, int HookId)
{
PLIST_ENTRY Elem = Table->Hooks[HOOKID_TO_INDEX(HookId)].Flink;
return Elem == &Table->Hooks[HOOKID_TO_INDEX(HookId)]
? NULL : CONTAINING_RECORD(Elem, HOOK, Chain);
}
/* find the first non-deleted hook in the chain */
static PHOOK FASTCALL
static
PHOOK
FASTCALL
IntGetFirstValidHook(PHOOKTABLE Table, int HookId)
{
PHOOK Hook;
PLIST_ENTRY Elem;
Hook = IntGetFirstHook(Table, HookId);
while (NULL != Hook && NULL == Hook->Proc)
{
Elem = Hook->Chain.Flink;
@ -191,7 +203,9 @@ IntGetNextHook(PHOOK Hook)
}
/* free a hook, removing it from its chain */
static VOID FASTCALL
static
VOID
FASTCALL
IntFreeHook(PHOOKTABLE Table, PHOOK Hook, PWINSTATION_OBJECT WinStaObj)
{
RemoveEntryList(&Hook->Chain);
@ -208,7 +222,8 @@ IntFreeHook(PHOOKTABLE Table, PHOOK Hook, PWINSTATION_OBJECT WinStaObj)
}
/* remove a hook, freeing it if the chain is not in use */
static VOID
static
VOID
IntRemoveHook(PHOOK Hook, PWINSTATION_OBJECT WinStaObj, BOOL TableAlreadyLocked)
{
PTHREADINFO W32Thread;
@ -240,7 +255,9 @@ IntRemoveHook(PHOOK Hook, PWINSTATION_OBJECT WinStaObj, BOOL TableAlreadyLocked)
}
/* release a hook chain, removing deleted hooks if the use count drops to 0 */
static VOID FASTCALL
static
VOID
FASTCALL
IntReleaseHookChain(PHOOKTABLE Table, int HookId, PWINSTATION_OBJECT WinStaObj)
{
PLIST_ENTRY Elem;
@ -253,17 +270,21 @@ IntReleaseHookChain(PHOOKTABLE Table, int HookId, PWINSTATION_OBJECT WinStaObj)
/* use count shouldn't already be 0 */
ASSERT(0 != Table->Counts[HOOKID_TO_INDEX(HookId)]);
if (0 == Table->Counts[HOOKID_TO_INDEX(HookId)])
{
return;
}
if (0 == --Table->Counts[HOOKID_TO_INDEX(HookId)])
{
Elem = Table->Hooks[HOOKID_TO_INDEX(HookId)].Flink;
while (Elem != &Table->Hooks[HOOKID_TO_INDEX(HookId)])
{
HookObj = CONTAINING_RECORD(Elem, HOOK, Chain);
Elem = Elem->Flink;
if (NULL == HookObj->Proc)
{
IntFreeHook(Table, HookObj, WinStaObj);
@ -272,7 +293,9 @@ IntReleaseHookChain(PHOOKTABLE Table, int HookId, PWINSTATION_OBJECT WinStaObj)
}
}
static LRESULT FASTCALL
static
LRESULT
FASTCALL
IntCallLowLevelHook(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam)
{
NTSTATUS Status;
@ -332,7 +355,7 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
if ((Hook->Thread != PsGetCurrentThread()) && (Hook->Thread != NULL))
{
// Post it in message queue.
/* Post it in message queue. */
return IntCallLowLevelHook(Hook, Code, wParam, lParam);
}
@ -344,7 +367,7 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
ClientInfo = GetWin32ClientInfo();
SaveHook = ClientInfo->phkCurrent;
ClientInfo->phkCurrent = Hook; // Load the call.
ClientInfo->phkCurrent = Hook; /* Load the call. */
Result = co_IntCallHookProc(HookId,
Code,
@ -375,7 +398,8 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
return Result;
}
VOID FASTCALL
VOID
FASTCALL
HOOK_DestroyThreadHooks(PETHREAD Thread)
{
int HookId;
@ -405,10 +429,12 @@ HOOK_DestroyThreadHooks(PETHREAD Thread)
case WH_KEYBOARD_LL:
case WH_MOUSE_LL:
Elem = GlobalHooks->Hooks[HOOKID_TO_INDEX(HookId)].Flink;
while (Elem != &GlobalHooks->Hooks[HOOKID_TO_INDEX(HookId)])
{
HookObj = CONTAINING_RECORD(Elem, HOOK, Chain);
Elem = Elem->Flink;
if (HookObj->Thread == Thread)
{
IntRemoveHook(HookObj, WinStaObj, TRUE);
@ -420,7 +446,8 @@ HOOK_DestroyThreadHooks(PETHREAD Thread)
}
}
static LRESULT
static
LRESULT
FASTCALL
co_HOOK_CallHookNext(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam)
{
@ -429,7 +456,9 @@ co_HOOK_CallHookNext(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam)
DPRINT1("CALLING HOOK from another Thread. %d\n", Hook->HookId);
return IntCallLowLevelHook(Hook, Code, wParam, lParam);
}
DPRINT("CALLING HOOK %d\n", Hook->HookId);
return co_IntCallHookProc(Hook->HookId,
Code,
wParam,
@ -442,8 +471,7 @@ co_HOOK_CallHookNext(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam)
LRESULT
FASTCALL
IntCallDebugHook(
PHOOK Hook,
IntCallDebugHook(PHOOK Hook,
int Code,
WPARAM wParam,
LPARAM lParam)
@ -461,6 +489,7 @@ IntCallDebugHook(
ProbeForRead((PVOID)lParam,
sizeof(DEBUGHOOKINFO),
1);
RtlCopyMemory(&Debug,
(PVOID)lParam,
sizeof(DEBUGHOOKINFO));
@ -470,6 +499,7 @@ IntCallDebugHook(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_DEBUG read from lParam ERROR!\n");
@ -477,7 +507,7 @@ IntCallDebugHook(
}
}
else
return lResult; // Need lParam!
return lResult; /* Need lParam! */
switch (wParam)
{
@ -488,16 +518,20 @@ IntCallDebugHook(
case HCBT_CLICKSKIPPED:
Size = sizeof(MOUSEHOOKSTRUCTEX);
break;
case HCBT_MOVESIZE:
Size = sizeof(RECT);
break;
case HCBT_ACTIVATE:
Size = sizeof(CBTACTIVATESTRUCT);
break;
case HCBT_CREATEWND: // Handle Ansi?
case HCBT_CREATEWND: /* Handle Ansi? */
Size = sizeof(CBT_CREATEWND);
// What shall we do? Size += sizeof(CREATESTRUCTEX);
/* What shall we do? Size += sizeof(CREATESTRUCTEX); */
break;
default:
Size = sizeof(LPARAM);
}
@ -540,6 +574,7 @@ IntCallDebugHook(
ProbeForRead((PVOID)Debug.lParam,
Size,
1);
RtlCopyMemory(HooklParam,
(PVOID)Debug.lParam,
Size);
@ -549,6 +584,7 @@ IntCallDebugHook(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_DEBUG read from Debug.lParam ERROR!\n");
@ -560,6 +596,7 @@ IntCallDebugHook(
if (HooklParam) Debug.lParam = (LPARAM)HooklParam;
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&Debug);
if (HooklParam) ExFreePoolWithTag(HooklParam, TAG_HOOK);
return lResult;
}
@ -568,8 +605,7 @@ IntCallDebugHook(
*/
LRESULT
FASTCALL
UserCallNextHookEx(
PHOOK Hook,
UserCallNextHookEx(PHOOK Hook,
int Code,
WPARAM wParam,
LPARAM lParam,
@ -578,7 +614,7 @@ UserCallNextHookEx(
LRESULT lResult = 0;
BOOL BadChk = FALSE;
// Handle this one first.
/* Handle this one first. */
if ((Hook->HookId == WH_MOUSE) ||
(Hook->HookId == WH_CBT && Code == HCBT_CLICKSKIPPED))
{
@ -590,6 +626,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(MOUSEHOOKSTRUCTEX),
1);
RtlCopyMemory(&Mouse,
(PVOID)lParam,
sizeof(MOUSEHOOKSTRUCTEX));
@ -599,15 +636,18 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_MOUSE read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&Mouse);
}
return lResult;
}
@ -616,6 +656,7 @@ UserCallNextHookEx(
case WH_MOUSE_LL:
{
MSLLHOOKSTRUCT Mouse;
if (lParam)
{
_SEH2_TRY
@ -623,6 +664,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(MSLLHOOKSTRUCT),
1);
RtlCopyMemory(&Mouse,
(PVOID)lParam,
sizeof(MSLLHOOKSTRUCT));
@ -632,11 +674,13 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_MOUSE_LL read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&Mouse);
@ -647,6 +691,7 @@ UserCallNextHookEx(
case WH_KEYBOARD_LL:
{
KBDLLHOOKSTRUCT Keyboard;
if (lParam)
{
_SEH2_TRY
@ -654,6 +699,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(KBDLLHOOKSTRUCT),
1);
RtlCopyMemory(&Keyboard,
(PVOID)lParam,
sizeof(KBDLLHOOKSTRUCT));
@ -663,11 +709,13 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_KEYBORD_LL read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&Keyboard);
@ -680,6 +728,7 @@ UserCallNextHookEx(
case WH_GETMESSAGE:
{
MSG Msg;
if (lParam)
{
_SEH2_TRY
@ -687,6 +736,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(MSG),
1);
RtlCopyMemory(&Msg,
(PVOID)lParam,
sizeof(MSG));
@ -696,14 +746,17 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_XMESSAGEX read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&Msg);
if (lParam && (Hook->HookId == WH_GETMESSAGE))
{
_SEH2_TRY
@ -711,6 +764,7 @@ UserCallNextHookEx(
ProbeForWrite((PVOID)lParam,
sizeof(MSG),
1);
RtlCopyMemory((PVOID)lParam,
&Msg,
sizeof(MSG));
@ -720,6 +774,7 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_GETMESSAGE write to lParam ERROR!\n");
@ -733,15 +788,17 @@ UserCallNextHookEx(
DPRINT1("HOOK WH_CBT!\n");
switch (Code)
{
case HCBT_CREATEWND: // Use Ansi.
case HCBT_CREATEWND: /* Use Ansi. */
DPRINT1("HOOK HCBT_CREATEWND\n");
// lResult = co_HOOK_CallHookNext(Hook, Code, wParam, lParam);
/* lResult = co_HOOK_CallHookNext(Hook, Code, wParam, lParam); */
break;
case HCBT_MOVESIZE:
{
RECTL rt;
DPRINT1("HOOK HCBT_MOVESIZE\n");
if (lParam)
{
_SEH2_TRY
@ -749,6 +806,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(RECT),
1);
RtlCopyMemory(&rt,
(PVOID)lParam,
sizeof(RECT));
@ -758,11 +816,13 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK HCBT_MOVESIZE read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&rt);
@ -773,6 +833,7 @@ UserCallNextHookEx(
case HCBT_ACTIVATE:
{
CBTACTIVATESTRUCT CbAs;
DPRINT1("HOOK HCBT_ACTIVATE\n");
if (lParam)
{
@ -781,6 +842,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(CBTACTIVATESTRUCT),
1);
RtlCopyMemory(&CbAs,
(PVOID)lParam,
sizeof(CBTACTIVATESTRUCT));
@ -790,20 +852,21 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK HCBT_ACTIVATE read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&CbAs);
}
break;
}
/*
The rest just use default.
*/
/* The rest just use default. */
default:
DPRINT1("HOOK HCBT_ %d\n",Code);
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, lParam);
@ -815,6 +878,7 @@ UserCallNextHookEx(
case WH_JOURNALRECORD:
{
EVENTMSG EventMsg;
if (lParam)
{
_SEH2_TRY
@ -822,6 +886,7 @@ UserCallNextHookEx(
ProbeForRead((PVOID)lParam,
sizeof(EVENTMSG),
1);
RtlCopyMemory(&EventMsg,
(PVOID)lParam,
sizeof(EVENTMSG));
@ -831,14 +896,17 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_JOURNAL read from lParam ERROR!\n");
}
}
if (!BadChk)
{
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)(lParam ? &EventMsg : NULL));
if (lParam)
{
_SEH2_TRY
@ -846,6 +914,7 @@ UserCallNextHookEx(
ProbeForWrite((PVOID)lParam,
sizeof(EVENTMSG),
1);
RtlCopyMemory((PVOID)lParam,
&EventMsg,
sizeof(EVENTMSG));
@ -855,6 +924,7 @@ UserCallNextHookEx(
BadChk = TRUE;
}
_SEH2_END;
if (BadChk)
{
DPRINT1("HOOK WH_JOURNAL write to lParam ERROR!\n");
@ -867,8 +937,9 @@ UserCallNextHookEx(
case WH_DEBUG:
lResult = IntCallDebugHook(Hook, Code, wParam, lParam);
break;
/*
Default the rest like, WH_FOREGROUNDIDLE, WH_KEYBOARD and WH_SHELL.
* Default the rest like, WH_FOREGROUNDIDLE, WH_KEYBOARD and WH_SHELL.
*/
case WH_FOREGROUNDIDLE:
case WH_KEYBOARD:
@ -880,13 +951,13 @@ UserCallNextHookEx(
DPRINT1("Unsupported HOOK Id -> %d\n",Hook->HookId);
break;
}
return lResult;
}
LRESULT
APIENTRY
NtUserCallNextHookEx(
int Code,
NtUserCallNextHookEx(int Code,
WPARAM wParam,
LPARAM lParam,
BOOL Ansi)
@ -933,7 +1004,7 @@ NtUserCallNextHookEx(
}
NextObj = IntGetNextHook(HookObj);
ClientInfo->phkCurrent = NextObj; // Preset next hook from list.
ClientInfo->phkCurrent = NextObj; /* Preset next hook from list. */
UserCallNextHookEx( HookObj, Code, wParam, lParam, Ansi);
UserDereferenceObject(HookObj);
@ -947,20 +1018,20 @@ CLEANUP:
HHOOK
APIENTRY
NtUserSetWindowsHookAW(
int idHook,
NtUserSetWindowsHookAW(int idHook,
HOOKPROC lpfn,
BOOL Ansi)
{
UNICODE_STRING USModuleName;
RtlInitUnicodeString(&USModuleName, NULL);
return NtUserSetWindowsHookEx(NULL, &USModuleName, 0, idHook, lpfn, Ansi);
}
HHOOK
APIENTRY
NtUserSetWindowsHookEx(
HINSTANCE Mod,
NtUserSetWindowsHookEx(HINSTANCE Mod,
PUNICODE_STRING UnsafeModuleName,
DWORD ThreadId,
int HookId,
@ -1007,14 +1078,17 @@ NtUserSetWindowsHookEx(
SetLastWin32Error(ERROR_INVALID_PARAMETER);
RETURN( NULL);
}
Mod = NULL;
Global = FALSE;
if (!NT_SUCCESS(PsLookupThreadByThreadId((HANDLE) ThreadId, &Thread)))
{
DPRINT1("Invalid thread id 0x%x\n", ThreadId);
SetLastWin32Error(ERROR_INVALID_PARAMETER);
RETURN( NULL);
}
/* Thread was referenced */
ThreadReferenced = TRUE;
if (Thread->ThreadsProcess != PsGetCurrentProcess())
@ -1031,6 +1105,7 @@ NtUserSetWindowsHookEx(
{
Mod = NULL;
Thread = PsGetCurrentThread();
Status = ObReferenceObjectByPointer(Thread,
THREAD_ALL_ACCESS,
PsThreadType,
@ -1113,6 +1188,7 @@ NtUserSetWindowsHookEx(
SetLastNtError(Status);
RETURN( NULL);
}
Hook->ModuleName.Buffer = ExAllocatePoolWithTag(PagedPool,
ModuleName.MaximumLength,
TAG_HOOK);
@ -1124,6 +1200,7 @@ NtUserSetWindowsHookEx(
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
RETURN( NULL);
}
Hook->ModuleName.MaximumLength = ModuleName.MaximumLength;
Status = MmCopyFromCaller(Hook->ModuleName.Buffer,
ModuleName.Buffer,
@ -1137,6 +1214,7 @@ NtUserSetWindowsHookEx(
SetLastNtError(Status);
RETURN( NULL);
}
Hook->ModuleName.Length = ModuleName.Length;
/* make proc relative to the module base */
Hook->Proc = (void *)((char *)HookProc - (char *)Mod);
@ -1147,7 +1225,7 @@ NtUserSetWindowsHookEx(
Hook->Ansi = Ansi;
Handle = Hook->Self;
// Clear the client threads next hook.
/* Clear the client threads next hook. */
ClientInfo->phkCurrent = 0;
UserDereferenceObject(Hook);
@ -1165,8 +1243,7 @@ CLEANUP:
BOOL
APIENTRY
NtUserUnhookWindowsHookEx(
HHOOK Hook)
NtUserUnhookWindowsHookEx(HHOOK Hook)
{
PWINSTATION_OBJECT WinStaObj;
PHOOK HookObj;
@ -1187,15 +1264,16 @@ NtUserUnhookWindowsHookEx(
RETURN( FALSE);
}
// Status = UserReferenceObjectByHandle(gHandleTable, Hook,
// otHookProc, (PVOID *) &HookObj);
/* Status = UserReferenceObjectByHandle(gHandleTable, Hook,
otHookProc, (PVOID *) &HookObj); */
if (!(HookObj = IntGetHookObject(Hook)))
{
DPRINT1("Invalid handle passed to NtUserUnhookWindowsHookEx\n");
ObDereferenceObject(WinStaObj);
// SetLastNtError(Status);
/* SetLastNtError(Status); */
RETURN( FALSE);
}
ASSERT(Hook == HookObj->Self);
IntRemoveHook(HookObj, WinStaObj, FALSE);