Реферат: Методы перехвата API-вызовов в Win32
#define DRIVE_REMOTE 4
#define DRIVE_CDROM 5
#define DRIVE_RAMDISK 6
Перехват этой функции позволяет «обманывать» программы Windows, переопределяя значение, возвращаемое этой функцией, для любого диска.
Программа DriveType2 состоит из двух модулей: DriveType2.exe и DT2lib.dll.
DriveType2.exe реализует интерфейс, а вся работа выполняется в DT2lib.dll.
Проект DT2lib состоит из трёх основных файлов:
APIHook.cpp – этот файл написан Джеффри Рихтером (за исключением некоторых исправлений, сделанных мной. О них я расскажу ниже). В этом файле описан класс CAPIHook, реализующий перехват заданной API-функции во всех модулях текущего процесса. Здесь же автоматически перехватываются функции LoadLibraryA, LoadLibraryW, LoadLibraryExA, LoadLibraryExW и GetProcAddress.
Toolhelp.h – этот файл также написан Джеффри Рихтером. В нём описан класс CToolhelp, реализующий обращение к системным toolhelp-функциям. В данном случае он используется классом CAPIHook для перечисления всех модулей, подключенных к процессу.
DT2Lib.cpp – в этом файле я реализовал перехват функции GetDriveTypeA с использованием класса CAPIHook, а также установку ловушки типа WH_GETMESSAGE, обеспечивающей подключение данного модуля (DT2lib.dll) ко всем потокам в системе.
Как же происходит перехват?
Сразу же после запуска DriveType2.exe вызывается функция DT2_HookAllApps из DT2lib.dll, которая устанавливает ловушку.
BOOL WINAPI DT2_HookAllApps(BOOL fInstall, DWORD dwThreadId) { BOOL fOk; if (fInstall) { chASSERT(g_hhook == NULL); // 2 разаперехватыватьникчему g_hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, ModuleFromAddress(DT2_HookAllApps), dwThreadId); // Установимловушку fOk = (g_hhook != NULL); } else { chASSERT(g_hhook != NULL); // Снимать-то нечего fOk = UnhookWindowsHookEx(g_hhook); // Снимем ловушку g_hhook = NULL; } return(fOk); К-во Просмотров: 357
Бесплатно скачать Реферат: Методы перехвата API-вызовов в Win32
|