Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

clhook.c

Go to the documentation of this file.
00001 /****************************** Module Header ******************************\ 00002 * Module Name: clhook.c 00003 * 00004 * Copyright (c) 1985 - 1999, Microsoft Corporation 00005 * 00006 * Client-side hook code. 00007 * 00008 * 05-09-1991 ScottLu Created. 00009 * 08-Feb-1992 IanJa Unicode/ANSI 00010 \***************************************************************************/ 00011 00012 #include "precomp.h" 00013 #pragma hdrstop 00014 00015 /***************************************************************************\ 00016 * SetWindowsHookExAW 00017 * 00018 * Client side routine for SetWindowsHookEx(). Needs to remember the library 00019 * name since hmods aren't global. Remembers the hmod as well so that 00020 * it can be used to calculate pfnFilter in different process contexts. 00021 * 00022 * History: 00023 * 05-15-91 ScottLu Created. 00024 \***************************************************************************/ 00025 00026 HHOOK SetWindowsHookExAW( 00027 int idHook, 00028 HOOKPROC lpfn, 00029 HINSTANCE hmod, 00030 DWORD dwThreadID, 00031 DWORD dwFlags) 00032 { 00033 WCHAR pwszLibFileName[MAX_PATH]; 00034 00035 /* 00036 * If we're passing an hmod, we need to grab the file name of the 00037 * module while we're still on the client since module handles 00038 * are NOT global. 00039 */ 00040 if (hmod != NULL) { 00041 if (GetModuleFileNameW(hmod, pwszLibFileName, 00042 sizeof(pwszLibFileName)/sizeof(TCHAR)) == 0) { 00043 00044 /* 00045 * hmod is bogus - return NULL. 00046 */ 00047 return NULL; 00048 } 00049 00050 #ifdef WX86 00051 try { 00052 if (RtlImageNtHeader(hmod)->FileHeader.Machine == IMAGE_FILE_MACHINE_I386) { 00053 dwFlags |= HF_WX86KNOWNDLL; 00054 } 00055 } except (W32ExceptionHandler(FALSE, RIP_WARNING)) { 00056 return NULL; 00057 } 00058 #endif 00059 } 00060 00061 return _SetWindowsHookEx(hmod, 00062 (hmod == NULL) ? NULL : pwszLibFileName, 00063 dwThreadID, idHook, (PROC)lpfn, dwFlags); 00064 } 00065 00066 /***************************************************************************\ 00067 * SetWindowsHookA, 00068 * SetWindowsHookW 00069 * 00070 * ANSI and Unicode wrappers for NtUserSetWindowsHookAW(). Could easily be macros 00071 * instead, but do we want to expose NtUserSetWindowsHookAW() ? 00072 * 00073 * History: 00074 * 30-Jan-1992 IanJa Created 00075 \***************************************************************************/ 00076 HHOOK 00077 WINAPI 00078 SetWindowsHookA( 00079 int nFilterType, 00080 HOOKPROC pfnFilterProc) 00081 { 00082 return NtUserSetWindowsHookAW(nFilterType, pfnFilterProc, HF_ANSI); 00083 } 00084 00085 HHOOK 00086 WINAPI 00087 SetWindowsHookW( 00088 int nFilterType, 00089 HOOKPROC pfnFilterProc) 00090 { 00091 return NtUserSetWindowsHookAW(nFilterType, pfnFilterProc, 0); 00092 } 00093 00094 00095 /***************************************************************************\ 00096 * SetWindowsHookExA, 00097 * SetWindowsHookExW 00098 * 00099 * ANSI and Unicode wrappers for SetWindowsHookExAW(). Could easily be macros 00100 * instead, but do we want to expose SetWindowsHookExAW() ? 00101 * 00102 * History: 00103 * 30-Jan-1992 IanJa Created 00104 \***************************************************************************/ 00105 HHOOK WINAPI SetWindowsHookExA( 00106 int idHook, 00107 HOOKPROC lpfn, 00108 HINSTANCE hmod, 00109 DWORD dwThreadId) 00110 { 00111 return SetWindowsHookExAW(idHook, lpfn, hmod, dwThreadId, HF_ANSI); 00112 } 00113 00114 HHOOK WINAPI SetWindowsHookExW( 00115 int idHook, 00116 HOOKPROC lpfn, 00117 HINSTANCE hmod, 00118 DWORD dwThreadId) 00119 { 00120 return SetWindowsHookExAW(idHook, lpfn, hmod, dwThreadId, 0); 00121 } 00122

Generated on Sat May 15 19:39:24 2004 for test by doxygen 1.3.7