Волею судеб стала передо мной задача перехвата ряда функций из Security.dll (не только, но к примеру).
Сразу нашел Detours 2.1 (он, кстати поменял интерфейс). Через DetourCreateProcessWithDll прекрасно ставлю свои обработчики на нужные фукции dll, все работает.
Но! Нужно это делать это всегда при загрузке данной DLL. И вот тут дело приходит к глобальному перехвату функций. И начинатся грабли.
Примеры Рихтера из четвертого издания под XP и вистой не работают. Слетают и всё...
Покурил rsdn, почитал
http://rsdn.ru/article/baseserv/apicallsintercepting.xmlАвтор(ы): Игорь В. Филимонов
Дата: 13.09.2004
Это не единственная статья на тему перехвата API-вызовов. Необходимость в ней возникла вследствие того, что в других широко известных статьях и книгах есть небольшие ошибки, которые порой приводят к тому, что перехват не работает. Эта статья избавлена от указанных недостатков.
. Данный пример (drivetype2) запускается под вистой и XP только после внесения правки:
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);
}
}
}
Однако желаемого результата на висте и хр лично я не достиг. Запускается, галки ставятся, но типы устройств не меняются.
Собственно вопрос — как решить указанную задачу? И что поменялось в последних ОС, что все перестало работать?
Заранее благодарен за любые советы!