请问:关于《windows核心编程》CAPIHook类有关问题,Page 333
请教:关于《windows核心编程》CAPIHook类问题,Page 333
这个类基本上我都看懂了,但是有个地方不太理解,请教各位大虾:
1。
CAPIHook g_TerminateProcess( "Kernel32.dll ", "TerminateProcess ", (PROC)Hook_TerminateProcess);
定义这个CAPIHook实例,已经把调用TerminateProcess函数转到我们自己定义的Hook_TerminateProcess。
2。
而下面又有一段代码,
static LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
return ::CallNextHookEx(g_hHook, code, wParam, lParam);
}
BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId)
{
....
if(bInstall)
{
g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, ModuleFromAddress(GetMsgProc), dwThreadId);
...
}
....
}
设置Hook,当有WH_GETMESSAGE消息时候,调用GetMsgProc函数。
=========================================================
不知道这1、2是怎么联系起来的,好像没有2的话也可以,我们已经把函数的调用跳转地址改掉了啊。
不太明白,请指教!
------解决方案--------------------
2的作用是把DLL注入到其他程序的进程中,没有2的话,其他程序根本无法被Hook。只有其他程序加载了此DLL之后,CAPIHook的构造函数才会被执行,将TerminateProcess函数Hook起来。你可以参考一下:http://blog.csdn.net/ATField/archive/2007/02/10/1507122.aspx
这个类基本上我都看懂了,但是有个地方不太理解,请教各位大虾:
1。
CAPIHook g_TerminateProcess( "Kernel32.dll ", "TerminateProcess ", (PROC)Hook_TerminateProcess);
定义这个CAPIHook实例,已经把调用TerminateProcess函数转到我们自己定义的Hook_TerminateProcess。
2。
而下面又有一段代码,
static LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
return ::CallNextHookEx(g_hHook, code, wParam, lParam);
}
BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId)
{
....
if(bInstall)
{
g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, ModuleFromAddress(GetMsgProc), dwThreadId);
...
}
....
}
设置Hook,当有WH_GETMESSAGE消息时候,调用GetMsgProc函数。
=========================================================
不知道这1、2是怎么联系起来的,好像没有2的话也可以,我们已经把函数的调用跳转地址改掉了啊。
不太明白,请指教!
------解决方案--------------------
2的作用是把DLL注入到其他程序的进程中,没有2的话,其他程序根本无法被Hook。只有其他程序加载了此DLL之后,CAPIHook的构造函数才会被执行,将TerminateProcess函数Hook起来。你可以参考一下:http://blog.csdn.net/ATField/archive/2007/02/10/1507122.aspx