请问:关于《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