Re[4]: проблемы с глобальным перехватом
От: nkaipov  
Дата: 28.10.04 03:41
Оценка:
Здравствуйте, 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);
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.