| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // zpzDll.cpp : 定义 DLL 应用程序的导出函数。
- //
- #include "stdafx.h"
- #include "define.h"
- #include "zpzDll.h"
- #include <algorithm>
- //共享数据
- #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;
- }
|