深入解析钩子和动态链接库中牛
民生理财 2021-08-25 01:57 字号: 大 中 小
你必须做的第一件事是创建共有的数据段。所以我们使用# pragma data_seg声明。使用某一好记的数据段名字(它必须是没有比8 个字符长) 。我想强调名字是任意的,这里使用了我自己的名字。我发现如果我使用好的名字象.SHARE 或.SHR 或.SHRDATA,别人会认为名字有特殊的意义。但是,我要说NO。# pragma data_seg(\".JOE\")
HANDLE hWnd = NULL;
# pragma dta_seg()
# pragma comment(linker ,\"/section:.JOE,rws \")
# pragma声明一个数据段,在此范围内声明的变量在初始化后将被指派到该数据段,假设他们初始化. 如未初始化,变量将被分配到缺省数据段,而# pragma 不起作用。
初看起来, 这将阻止你在共有的数据段使用一些C++ 对象,因为你无法初始化C++中用户定义的对象。这看来是一个根本局限。
# pragma comment使连接器有命令行开关被显示增加到链接步骤。你可以进入VC++ 项目| 设置并且改变连接器命令行。
你可以预定某一机制设置窗口句柄,例如
void SetWindow(HWND w) {hWnd = w; }
但更经常的是如下所示的与钩子结合。
Sample: A Mouse Hook
header file (myhook.h)
函数setMyHook并且clearMyHook必须在此被声明。这在我的另一文章中有详细论述。“The Ultimate DLL Header File.”
_T(\"UMW_MOUSEHOOK-\" \\
\"{B30856F0-D3DD-11d4-A00B-D04}\")
source file (p)
#include \"stdafx.h\"
#include \"myhook.h\"
#pragma data_seg(\".JOE\")
HWND hWndServer = NULL;
#pragma data_seg()
#pragma comment(\"linker, /section:.JOE,rws\")
HINSTANCE hInstance;
UINT HWM_MOUSEHOOK;
HHOOK hook;
// Forward declaration
static LRESULT CALLBACK msghook(int nCode, WPARAM wParam, LPARAM lParam);
/****************************************************************
*DllMain
*Inputs:
* HINSTANCE hInst: Instance handle for the DLL
* DWORD Reason: Reason for call
* LPVOID reserved: ignored
* Result: BOOL
* TRUE if successful
* FALSE if there was an error (never returned)
* Effect:
* Initializes the DLL.
****************************************************************/
BOOL DllMain(HINSTANCE hInst, DWORD Reason, LPVOID reserved)
{
switch(Reason)
{ /* reason */
//**********************************************
// PROCESS_ATTACH
//**********************************************
case DLL_PROCESS_ATTACH:
// Save the instance handle because we need it to set the hook later
hInstance = hInst;
// This code initializes the hook notification message
UWM_MOUSEHOOK = RegisterWindowMessage(UWM_MOUSEHOOK_MSG);
return TRUE;
//**********************************************
// PROCESS_DETACH
//**********************************************
case DLL_PROCESS_DETACH:
// If the server has not unhooked the hook, unhook it as we unload
if(hWndServer != NULL)
clearMyHook(hWndServer);
return TRUE;
} /* reason */
/****************************************************************
* setMyHook
* Inputs:
* HWND hWnd: Window whose hook is to be set
* Result: BOOL
* TRUE if the hook is properly set
* FALSE if there was an error, such as the hook already
*being set
* Effect:
* Sets the hook for the specified window.
* This sets a message-intercept hook (WH_GETMESSAGE)
* If the setting is successful, the hWnd is set as the
* server window.
****************************************************************/
__declspec(dllexport) BOOL WINAPI setMyHook(HWND hWnd)
治标要先治本 {
if(hWndServer != NULL)
return FALSE;
hook = SetWindowsHookEx(
WH_GETMESSAGE,
(HOOKPROC)msghook,
hInstance,
0 );
if(hook != NULL)
{ /* success */
hWndServer = hWnd;
return TRUE;
} /* success */
return FALSE;
} // SetMyHook
#define UWM_MOUSEHOOK_MSG \\
Trackback:
心衰高血压怎么预防呼和浩特白癜风哪家医院好
长沙哪医院治疗男科好
-
-
天津女排踏上复兴之路阵容重组陈丽怡仍是中
天津女排踏上复兴之路 阵容重组陈丽怡仍是中坚天津女排夺冠...
2020-07-07 | 民生理财
-
-
专家房产税征收受到九成以上政府官员阻挠搭配
专家:房产税征收受到九成以上政府官员阻挠 “要搞好房地产...
2020-06-06 | 民生理财
-
-
海南西环高速铁路正式试运行和谐号动车疾驰搭配
海南西环高速铁路正式试运行 和谐号动车疾驰前进 11月26日,...
2020-06-02 | 民生理财
-
-
北京市机动车停车条例搭配
北京市机动车停车条例(2018年3月30日北京市第十五届人民代表...
2020-05-31 | 民生理财
-
-
决胜局独揽分李盈莹表现出彩担任接应效果不搭配
决胜局独揽分李盈莹表现出彩 担任接应效果不佳李盈莹中国女...
2020-05-30 | 民生理财
-
-
特评从C罗到彩票佛爷的任性主帅为他背锅搭配
特评:从C罗到彩票!佛爷的任性 主帅为他背锅原标题:特评...
2020-05-29 | 民生理财