Отладка приложений




Подключение функций, экспортируемых по порядковому значению - часть 3


 {

*ppOrigAddr = (PROC)pRealThunk->ul.Function; 

}

// Microsoft имеет два различных определения 

// РIМАСЕ_ТШ№С_ОАТА-полей для будущей поддержки Win64

 // Будет использован самый последний набор заголовков

//из W2K RC2 Platform SDK, с которыми будут иметь дело

 // заголовки из Visual C++ 6 Service Pack 3.

// Подключить функцию (DWORD*)SpRealThunk->ul.Function; 

*pTemp = (DWORD)(pHookFunc); 

DWORD dwOldProtect;

// Изменить защиту обратно к тому состоянию, которое

 // предшествовало переписыванию указателя функции.

 VERIFY ( VirtualProtect ( mbi_thunk.BaseAddress,

mbi_thunk.RegionSize ,

 mbi_thunk.Protect , 

sdwOldProtect )); 

// Жизнь прекрасна! 

SetLastError ( ERROR_SUCCESS);

 return ( TRUE);

 } 

}

// Инкремент обеих таблиц. pOrigThunk++; pRealThunk++;

 }

// Ничего не было подключено. Технически это не ошибка. Это просто

 // означает, что модуль импортирован, а функция — нет.

 SetLastError ( ERROR_SDCCESS);

 return ( FALSE); 

}

Для реализации обработки AfxTrace без ее подключения, пришлось бы просматривать стек при каждом вызове, чтобы вернуться к реальному вызову функции OutputDebugstring. Дополнительная работа на каждом вызове была бы медленнее, по сравнению с прямым подключением AfxTrace. Кроме того, если бы я игнорировал AfxTrace, то утилита LIMODS была бы, в основном, бесполезна для MFC-программистов. И, наконец, я предпочел создавать утилиту LIMODS настолько полной, насколько это возможно, причем я был вынужден дважды проверять версии MFC DLL.




Содержание  Назад  Вперед