zpzDll.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // zpzDll.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "stdafx.h"
  4. #include "define.h"
  5. #include "zpzDll.h"
  6. //共享数据
  7. #pragma data_seg("shared")
  8. HWND g_hWnd = NULL;
  9. char g_data[MAX_DATA_LENGTH] = {0};
  10. int data_length = 0;
  11. #pragma data_seg()
  12. #pragma comment(linker,"/SECTION:shared,RWS")
  13. HHOOK g_Hook = NULL;
  14. extern HINSTANCE g_Inst;
  15. /*
  16. *钩子过程函数,不做任何处理,因为目的仅仅是把dll注入到进程
  17. **/
  18. LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
  19. {
  20. CWPSTRUCT *pMsg = (CWPSTRUCT *)lParam;
  21. return CallNextHookEx(g_Hook, nCode, wParam, lParam);
  22. }
  23. /*
  24. *对所有进程安装钩子,所有新开进程都会加载这个dll
  25. **/
  26. BOOL InstallHook()
  27. {
  28. if (g_Hook == NULL)
  29. {
  30. g_Hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_Inst, 0);
  31. if (g_Hook != NULL)
  32. {
  33. return TRUE;
  34. }
  35. }
  36. return FALSE;
  37. }
  38. void UninstallHook()
  39. {
  40. if (UnhookWindowsHookEx(g_Hook))
  41. {
  42. g_Hook = NULL;
  43. }
  44. }
  45. void SetHwnd(HWND hWnd)
  46. {
  47. g_hWnd = hWnd;
  48. }
  49. /*
  50. *取出抓取到的消息,取出后就清空,保证每个消息只会取出一次
  51. **/
  52. void HookGetData(char* dst, int* length)
  53. {
  54. //把数据复制出来
  55. memcpy_s(dst, data_length, g_data, data_length);
  56. *length = data_length;
  57. //清空数据
  58. memset(g_data, 0, MAX_DATA_LENGTH);
  59. data_length = 0;
  60. }