00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include "precomp.h"
00013
#pragma hdrstop
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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
00037
00038
00039
00040
if (hmod !=
NULL) {
00041
if (GetModuleFileNameW(hmod, pwszLibFileName,
00042
sizeof(pwszLibFileName)/
sizeof(TCHAR)) == 0) {
00043
00044
00045
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
00068
00069
00070
00071
00072
00073
00074
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
00097
00098
00099
00100
00101
00102
00103
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