Главная страница
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.016 c
11-59642
MyVeryShortLogin
2002-08-13 15:13
2003.05.19
procedure WMLButtonDown(var Msg : TMessage); message WM_LBUTTONDO


14-59845
wwww
2003-04-28 17:13
2003.05.19
Cursor


14-59894
Vlad Oshin
2003-04-29 10:23
2003.05.19
Кто такие ителлегенты?


9-59520
ProNix
2002-12-09 17:41
2003.05.19
ARCHERS GAME


3-59602
sva82
2003-04-28 11:51
2003.05.19
Замена строк на столбцы