Здравствуйте, lastwalrus, Вы писали:
L>Имеется три машины...
L>win2k sp4(точно не уверен), всё работает...
L>winXP sp2 — валится StackOverFlow в методе LoadLibraryExW( там грузится в процесс еще одна DT2lib.dll,
L>и дальше следующий вызов LoadLibraryExW приводит к зацикливанию..)
В коде примера ошибка. Он не дружит с повторным вызовом LoadLibrary
для Dll перехватчика. Вот работоспособный вариант.
void CAPIHook::FixupNewlyLoadedModule(HMODULE hmod, DWORD dwFlags)
{
// If a new module is loaded, hook the hooked functions
if ((hmod != NULL) && ((dwFlags & LOAD_LIBRARY_AS_DATAFILE) == 0)) {
const HMODULE hmodThisMod = ModuleFromAddress(ReplaceIATEntryInAllMods); // Добавлено
for (CAPIHook* p = sm_pHead; p != NULL; p = p->m_pNext) {
if (p->m_fExcludeAPIHookMod && hmodThisMod == hmod) continue; // Добавлено
ReplaceIATEntryInOneMod(p->m_pszCalleeModName, p->m_pfnOrig, p->m_pfnHook, hmod);
}
}
}