#ifndef _HOOKS_H_ #define _HOOKS_H_ // // Constant declarations // #define HAF_RESOLVED 0x0001 #define HAF_BOTTOM_OF_CHAIN 0x0002 #define MAX_MODULES 512 #define SHIM_GETHOOKAPIS "GetHookAPIs" typedef PHOOKAPI (*PFNNEWGETHOOKAPIS)(DWORD dwGetProcAddress, DWORD dwLoadLibraryA, DWORD dwFreeLibrary, DWORD* pdwHookAPICount); typedef LPSTR (*PFNGETCOMMANDLINEA)(VOID); typedef LPWSTR (*PFNGETCOMMANDLINEW)(VOID); typedef PVOID (*PFNGETPROCADDRESS)(HMODULE hMod, char* pszProc); typedef HINSTANCE (*PFNLOADLIBRARYA)(LPCSTR lpLibFileName); typedef HINSTANCE (*PFNLOADLIBRARYW)(LPCWSTR lpLibFileName); typedef HINSTANCE (*PFNLOADLIBRARYEXA)(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); typedef HINSTANCE (*PFNLOADLIBRARYEXW)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); typedef BOOL (*PFNFREELIBRARY)(HMODULE hLibModule); typedef VOID (*PFNEXITPROCESS)(UINT uExitCode); typedef HANDLE (*PFNCREATETHREAD)(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); //number of the base hook apis used by init.c and shim2.c #define SHIM_BASE_APIHOOK_COUNT 8 enum { hookGetProcAddress, hookLoadLibraryA, hookLoadLibraryW, hookLoadLibraryExA, hookLoadLibraryExW, hookFreeLibrary, hookExitProcess, hookCreateThread, }; extern PHOOKAPI ConstructChain( PVOID pfnOld ,DWORD* DllListIndex); extern void __stdcall Shim2PatchNewModules( VOID ); extern void AddHookAPIs( HMODULE hShimDll, PHOOKAPI pHookAPIs, DWORD dwCount,LPTSTR szIncExclDllList); // // Structure definitions // // // Function definitions // VOID InitializeBaseHooks(HINSTANCE hInstance); #endif //_HOOKS_H_