// zpzDll.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include "define.h" #include "zpzDll.h" #include //共享数据 #pragma data_seg("shared") HWND g_hWnd = NULL; char g_sComNum[MAX_PATH] = { 0 }; wchar_t g_wsComNum[MAX_PATH] = { 0 }; char g_data[MAX_DATA_LENGTH] = {0}; int data_length = 0; #pragma data_seg() #pragma comment(linker,"/SECTION:shared,RWS") HHOOK g_Hook = NULL; extern HINSTANCE g_Inst; /* *钩子过程函数,不做任何处理,因为目的仅仅是把dll注入到进程 **/ LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { CWPSTRUCT *pMsg = (CWPSTRUCT *)lParam; return CallNextHookEx(g_Hook, nCode, wParam, lParam); } /* *对所有进程安装钩子,所有新开进程都会加载这个dll **/ BOOL InstallHook() { if (g_Hook == NULL) { g_Hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_Inst, 0); if (g_Hook != NULL) { return TRUE; } } return FALSE; } void UninstallHook() { if (UnhookWindowsHookEx(g_Hook)) { g_Hook = NULL; } } void SetHwnd(HWND hWnd) { g_hWnd = hWnd; } void SetComNum(const char* s_comNum, const wchar_t* ws_comNum, size_t nLength) { memset(g_sComNum, 0, MAX_PATH); memset(g_wsComNum, 0, MAX_PATH); memcpy_s(g_sComNum, nLength, s_comNum, nLength); wcscpy_s(g_wsComNum, ws_comNum); } /* *取出抓取到的消息,取出后就清空,保证每个消息只会取出一次 **/ void HookGetData(char* dst, int* length) { //把数据复制出来 memcpy_s(dst, data_length, g_data, data_length); *length = data_length; //清空数据 memset(g_data, 0, MAX_DATA_LENGTH); data_length = 0; }