APISpy32.h
上传用户:tzh4061
上传日期:2007-01-08
资源大小:309k
文件大小:1k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. #ifndef APISPY32_H
  2. #define APISPY32_H
  3. #include <windows.h>
  4. #ifdef WIN95
  5. // Increase this value if you wish to intercept more than
  6. // 100 API functions under Windows 95/98.
  7. #define MAX_API 100
  8. #endif
  9. #define MAX_API_NAME 50
  10. #define MAX_TEXT_LEN 40
  11. #define MAX_PARAM    20
  12. struct tagAPIInfo;
  13. typedef void (*tagAPIAddr)();
  14. typedef void (*tagHandlerAddr)(tagAPIInfo *, PSTR, ...);
  15. enum tagParamType
  16. {
  17.   PARAM_INT,
  18.   PARAM_DWORD,
  19.   PARAM_WORD,
  20.   PARAM_BYTE,
  21.   PARAM_PSTR,
  22.   PARAM_PVOID,
  23.   PARAM_PINT,
  24.   PARAM_PDWORD,
  25.   PARAM_PWORD,
  26.   PARAM_PBYTE,
  27.   PARAM_HANDLE,
  28.   PARAM_HWND,
  29.   PARAM_BOOL,
  30.   PARAM_PWSTR,
  31.   PARAM_UNKNOWN
  32. };
  33. struct tagParamSpec
  34. {
  35.   char *ParamName;
  36.   tagParamType ParamType;
  37.   char *ParamFormat;
  38.   DWORD dwParamMask;
  39. };
  40. struct tagAPIInfo
  41. {
  42.   BYTE Opcodes[5];
  43.   tagAPIAddr APIAddress;
  44.   #ifdef WIN95
  45.   char szAPIName[MAX_API_NAME + 1];
  46.   HANDLE hMutex;
  47.   #endif
  48.   #ifdef WINNT
  49.   DWORD dwOldProtectionFlags;
  50.   PSTR szAPIName;
  51.   CRITICAL_SECTION CriticalSection;
  52.   #endif
  53.   tagHandlerAddr APIEnterHandler;
  54.   tagParamType ParamList[MAX_PARAM];
  55.   BYTE ParamCount;
  56.   tagAPIInfo *Next;
  57. };
  58. tagAPIInfo *HookAPIFunction(PSTR pszModuleName,
  59.                             PSTR pszAPIName,
  60.                             tagHandlerAddr APIEnterHandler);
  61. void UnhookAPIFunction(tagAPIInfo *pAPIInfo);
  62. void UnhookAllAPIFunctions();
  63. #endif