Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

своя GetModuleHandle   Найти похожие ветки 

 
AlexRush ©   (2003-03-18 13:25) [0]

Доброго времени суток, господа мастера.
Я написал аналог GetProcAddress. (как обычно, получает хендл модуля и имя ф-и и возвращает ее адрес)
Теперь очередь GetModuleHandle. Как мне без вызовов API (читая лищь память своего процесса) получить хендл загруженного модуля по его имени. Я так предполагаю, копать следует в сторону Базы данных процесса. Есть существенная поправка - код должен работать как под NT, так и под 9x.
Если кто-то занимался даной проблемой, рад выслушать предложения или готовый код.
Спасибо.


 
Игорь Шевченко ©   (2003-03-18 14:55) [1]

Под NT:
__try {
_LIST_ENTRY** pInLoadOrderModuleList;
_LDR_DATA_TABLE_ENTRY* pModule;
__TEB* Teb = GetTEB();

pInLoadOrderModuleList = & GetTEB()->ProcessEnvironmentBlock->Ldr->InLoadOrderModuleList;
for (pModule = (_LDR_DATA_TABLE_ENTRY*)(*pInLoadOrderModuleList);
(_LIST_ENTRY**)pModule != pInLoadOrderModuleList;
pModule = (_LDR_DATA_TABLE_ENTRY*)(Work->InLoadOrderLinks.Flink))
if (pModule->DllBase == DllBase) {
register UNICODE_STRING* pusModuleName = & pModule->FullDllName;
result = min(size * sizeof(wchar), pusModuleName->Length + sizeof(wchar));
__try {
memmove (lpszFileName, pusModuleName->Buffer, result);
if (result != pusModuleName->Length + sizeof(wchar))
result = pusModuleName->Length;
}
__except (__GetModuleFileNameWExceptionFilter()) {
__BaseSetLastNTError (
GetExceptionInformation()->ExceptionRecord.ExceptionCode);
// ___local_unwind2 (...standard exception processing)
result = 0;
}
}
}


 
AlexRush ©   (2003-03-18 16:06) [2]

Игорь Шевченко >>
Прошу прощения за возможный ламеризм, но где взять определение
структур
_LDR_DATA_TABLE_ENTRY
__TEB
и ф-и
GetTEB() ?


 
nikkie ©   (2003-03-18 17:24) [3]

>Я написал аналог GetProcAddress. ... Теперь очередь GetModuleHandle.
удовлетворите любопытство - зачем?


 
AlexRush ©   (2003-03-19 18:28) [4]

nikkie >> Из любви к искусству (обход перехвата вызовов API).

аналог GetModuleHandle для NT я уже написал, под 9х столкнулся с интересной особенностью - код kernel32 местами недоступен для чтения (именно ее хендл мне и нужен).
Так что теперь проблема локализуется до 9х-Me.



Страницы: 1 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
3-59566
Sergant
2003-04-26 15:06
2003.05.19
Мониторинг обновления БД и Timer


1-59768
GIL
2003-05-06 16:37
2003.05.19
TTreeNode


1-59680
fulcrum
2003-05-07 15:25
2003.05.19
IniFiles


14-59869
Psibug
2003-04-28 14:53
2003.05.19
Как узнать дату и время создания и изменения файла?


3-59543
Avreliy
2003-04-25 16:21
2003.05.19
Перехват сообщений об ошибках в БД.