Форум: "WinAPI";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Внизсвоя 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c