// get the list of modules in this process
// 这里得到的是当前进程中的所有模块
CToolhelp th(TH32CS_SNAPMODULE, GetCurrentProcessId());
MODULEENTRY32 me = { sizeof(me) };
BOOL bOK = th.ModuleFirst(&me);
for (; bOK; bOK = th.ModuleNext(&me))
{
// NOTE: we don't hook function in our own module
if (me.hModule != hmodThisMod)
{
// Hook this function in this module
ReplaceIATEntryInOneMod(pszCalleeModName, pfnOrig, pfnHook, me.hModule);
}
}
}
/////////////////////////////////////////////////////////////////////////////////
void CAPIHook::ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC pfnOrig,
PROC pfnHook, HMODULE hmodCaller)
{
……
……
// the address match, change the import section address
// GetCurrentProcess(),怎么是当前进程的
// 这里是修改当前进程中某个模块中导入部分的一个函数地址
WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnHook, sizeof(pfnHook), NULL);
return; //we did it, get out