zpzDll.cpp 1.7 KB

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