zpzDll.cpp 1.6 KB

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