Mydll.cpp
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:3k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. // ------------------------------------- //
  2. // 您如果要使用本文件,请不要删除本说明  //
  3. // ------------------------------------- //
  4. //             HOOKAPI 开发例子          //
  5. //   Copyright 2002 编程沙龙 Paladin     //
  6. //       www.ProgramSalon.com            //
  7. // 编译提示:如果是Win9x系统,需要预定义WIN95 //
  8. // ------------------------------------- //
  9. #include "stdafx.h"
  10. #include <io.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <time.h>
  14. #include "mydll.h"
  15. #include "util.h"
  16. #ifdef WIN95
  17. #pragma code_seg("_INIT")
  18. #pragma comment(linker,"/SECTION:.bss,RWS /SECTION:.data,RWS /SECTION:.rdata,RWS /SECTION:.text,RWS /SECTION:_INIT,RWS ")
  19. #pragma comment(linker,"/BASE:0xBFF70000")
  20. #endif
  21. BOOL WINAPI myTextOutW(HDC hDC, int x, int y, LPCWSTR str, int len)
  22. {
  23. WriteLog("myTextOutW");
  24. if(len >0)
  25. {
  26. char *pstr =(char *)LocalAlloc(LMEM_FIXED, len*2+1);
  27. int len2 =WideCharToMultiByte(CP_ACP, 0, str, len, pstr, len*2, NULL, NULL);
  28. pstr[len2] =0;
  29. WriteLog("myTextOutW, x:%d, y:%d, str:%s, len:%d", x, y, pstr, len);
  30. LocalFree(pstr);
  31. }
  32. return TextOutW(hDC, x, y, str, len);
  33. }
  34. BOOL WINAPI myTextOutA(HDC hDC, int x, int y, LPCSTR str, int len)
  35. {
  36. #ifdef WIN95
  37. unsigned char cl_val;
  38. _asm
  39. {
  40. Mov [cl_val], CL
  41. }
  42. WriteLog("myTextOutA, cl:%d", cl_val);
  43. if(cl_val ==50) return myTextOutW(hDC, x, y, (LPCWSTR)str, len);
  44. #endif
  45. if(len >0)
  46. {
  47. char *pstr =(char *)LocalAlloc(LMEM_FIXED, len+1);
  48. strncpy(pstr, str, len);
  49. pstr[len] =0;
  50. WriteLog("myTextOutA, x:%d, y:%d, str:%s, len:%d", x, y, pstr, len);
  51. LocalFree(pstr);
  52. }
  53. return TextOutA(hDC, x, y, str, len);
  54. }
  55. BOOL WINAPI myExtTextOutA(HDC hDC, int x, int y, UINT options, const RECT *lprc, LPCSTR str, UINT len, CONST INT *lpDx)
  56. {
  57. WriteLog("myExtTextOutA, len:%d", len);
  58. if(len >0)
  59. {
  60. char *pstr =(char *)LocalAlloc(LMEM_FIXED, len+1);
  61. strncpy(pstr, str, len);
  62. pstr[len] =0;
  63. WriteLog("myExtTextOutA, x:%d, y:%d, str:%s, len:%d", x, y, pstr, len);
  64. LocalFree(pstr);
  65. }
  66. return ExtTextOutA(hDC, x, y, options, lprc, str, len, lpDx);
  67. }
  68. BOOL WINAPI myExtTextOutW(HDC hDC, int x, int y, UINT options, const RECT *lprc, LPCWSTR str, UINT len, CONST INT *lpDx)
  69. {
  70. WriteLog("myExtTextOutW, len:%d", len);
  71. if(len >0)
  72. {
  73. char *pstr =(char *)LocalAlloc(LMEM_FIXED, len*2+1);
  74. int len2 =WideCharToMultiByte(CP_ACP, 0, str, len, pstr, len*2, NULL, NULL);
  75. pstr[len2] =0;
  76. WriteLog("myExtTextOutW, x:%d, y:%d, str:%s, len:%d", x, y, pstr, len);
  77. LocalFree(pstr);
  78. }
  79. return ExtTextOutW(hDC, x, y, options, lprc, str, len, lpDx);
  80. }
  81. // 地址小的放前面
  82. MYAPIINFO myapi_info[] =
  83. {
  84. #ifdef WIN95
  85. {"GDI32.DLL", "TextOutA", 5, "myTextOutA", 2},
  86. {"GDI32.DLL", "ExtTextOutW", 8, "myExtTextOutW", 0, "myExtTextOutA"},
  87. #else
  88. {"GDI32.DLL", "TextOutW", 5, "myTextOutW"},
  89. {"GDI32.DLL", "TextOutA", 5, "myTextOutA"},
  90. {"GDI32.DLL", "ExtTextOutW", 8, "myExtTextOutW"},
  91. #endif
  92. {"GDI32.DLL", "ExtTextOutA", 8, "myExtTextOutA"},
  93. {NULL}
  94. };
  95. // 下列内容请不要修改
  96. MYAPIINFO *GetMyAPIInfo()
  97. {
  98. return &myapi_info[0];
  99. }
  100. BOOL APIENTRY DllMain( HANDLE hModule, 
  101.                        DWORD  ul_reason_for_call, 
  102.                        LPVOID lpReserved
  103.  )
  104. {
  105. if(ul_reason_for_call =DLL_PROCESS_ATTACH)
  106. {
  107. //GetProfileString("HookAPI", "dll_path", "", g_szDllPath, sizeof(g_szDllPath));
  108. }
  109. return TRUE;
  110. }