Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
3.5 KiB

/****************************** Module Header ******************************\
* Module Name: clhook.c
*
* Copyright (c) 1985 - 1999, Microsoft Corporation
*
* Client-side hook code.
*
* 05-09-1991 ScottLu Created.
* 08-Feb-1992 IanJa Unicode/ANSI
\***************************************************************************/
#include "precomp.h"
#pragma hdrstop
/***************************************************************************\
* SetWindowsHookExAW
*
* Client side routine for SetWindowsHookEx(). Needs to remember the library
* name since hmods aren't global. Remembers the hmod as well so that
* it can be used to calculate pfnFilter in different process contexts.
*
* History:
* 05-15-91 ScottLu Created.
\***************************************************************************/
HHOOK SetWindowsHookExAW(
int idHook,
HOOKPROC lpfn,
HINSTANCE hmod,
DWORD dwThreadID,
DWORD dwFlags)
{
WCHAR pwszLibFileName[MAX_PATH];
/*
* If we're passing an hmod, we need to grab the file name of the
* module while we're still on the client since module handles
* are NOT global.
*/
if (hmod != NULL) {
if (GetModuleFileNameW(hmod,
pwszLibFileName,
ARRAY_SIZE(pwszLibFileName)) == 0) {
/*
* hmod is bogus - return NULL.
*/
return NULL;
}
}
return _SetWindowsHookEx(hmod,
(hmod == NULL) ? NULL : pwszLibFileName,
dwThreadID, idHook, (PROC)lpfn, dwFlags);
}
/***************************************************************************\
* SetWindowsHookA,
* SetWindowsHookW
*
* ANSI and Unicode wrappers for NtUserSetWindowsHookAW(). Could easily be macros
* instead, but do we want to expose NtUserSetWindowsHookAW() ?
*
* History:
* 30-Jan-1992 IanJa Created
\***************************************************************************/
FUNCLOG2(LOG_GENERAL, HHOOK, WINAPI, SetWindowsHookA, int, nFilterType, HOOKPROC, pfnFilterProc)
HHOOK
WINAPI
SetWindowsHookA(
int nFilterType,
HOOKPROC pfnFilterProc)
{
return NtUserSetWindowsHookAW(nFilterType, pfnFilterProc, HF_ANSI);
}
FUNCLOG2(LOG_GENERAL, HHOOK, WINAPI, SetWindowsHookW, int, nFilterType, HOOKPROC, pfnFilterProc)
HHOOK
WINAPI
SetWindowsHookW(
int nFilterType,
HOOKPROC pfnFilterProc)
{
return NtUserSetWindowsHookAW(nFilterType, pfnFilterProc, 0);
}
/***************************************************************************\
* SetWindowsHookExA,
* SetWindowsHookExW
*
* ANSI and Unicode wrappers for SetWindowsHookExAW(). Could easily be macros
* instead, but do we want to expose SetWindowsHookExAW() ?
*
* History:
* 30-Jan-1992 IanJa Created
\***************************************************************************/
FUNCLOG4(LOG_GENERAL, HHOOK, WINAPI, SetWindowsHookExA, int, idHook, HOOKPROC, lpfn, HINSTANCE, hmod, DWORD, dwThreadId)
HHOOK WINAPI SetWindowsHookExA(
int idHook,
HOOKPROC lpfn,
HINSTANCE hmod,
DWORD dwThreadId)
{
return SetWindowsHookExAW(idHook, lpfn, hmod, dwThreadId, HF_ANSI);
}
FUNCLOG4(LOG_GENERAL, HHOOK, WINAPI, SetWindowsHookExW, int, idHook, HOOKPROC, lpfn, HINSTANCE, hmod, DWORD, dwThreadId)
HHOOK WINAPI SetWindowsHookExW(
int idHook,
HOOKPROC lpfn,
HINSTANCE hmod,
DWORD dwThreadId)
{
return SetWindowsHookExAW(idHook, lpfn, hmod, dwThreadId, 0);
}