Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


хм...неужели я задаю такие сложные вопросы,что никто не хочет на них отвечать...
Иными словами,либо я чего-то не допонимаю,либо библиотека psapi.dll, в которой объявлены такие функции как GetModuleFileNameEx, GetModuleBaseName, криво написана...
Тем не менее мне удалось создать работающий код(точнее взять его основу на MSDN),который будет динамически получать имя загружаемой в чужом процессе библиотеки,хотя,по-моему,всё это скорее напоминает какие-то танцы с бубном.
Код: Выделить весь код
function GetFileNameFromHandle(hFile : Cardinal) : Boolean;
 { Параметр hFile мы получаем из dEvent.LoadDll.hFile (см. выше) - кстати,одно из значений,которое в отличии от остальных значений реально возвращается отладочным событием LOAD_DLL_DEBUG_EVENT }
const
 wantedLibName = 'XXX.dll';
var
 hFileMap : Cardinal;
 pMem : Pointer;
 FilePath : array [0..MAX_PATH - 1] of Char;
 sFilePath : String;
 sFileName : String;
begin
 Result := False;

try
 hFileMap := CreateFileMapping(hFile, NIL, PAGE_READONLY, 0, 0, NIL);
if hFileMap <> 0 then
begin
 pMem := MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1);
if pMem <> NIL then
begin
if GetMappedFileName(GetCurrentProcess(), pMem,
                     @FilePath, SizeOf(FilePath)) <> 0 then // тут мы наконец-то получаем полный путь к нашему файлу
begin
 sFilePath := StrPas(FilePath);
 sFileName := ExtractFileName(sFilePath); // здесь мы убираем путь,оставляя только само имя файла...
if AnsiSameText(wantedLibName, sFileName) then // и сравниваем его с именем искомого файла
begin
 Result := True;
end;
end else MessageBox(Handle, 'GetMappedFileName failed', NIL, MB_OK);
end else MessageBox(Handle, 'pMem = NIL', NIL, MB_OK);
end else MessageBox(Handle, 'hFileMap = 0', NIL, MB_OK);

finally
 UnMapViewOfFile(pMem);
 CloseHandle(hFileMap);
end; // try...finally

end; // GetFileNameFromHandle
...вот так вот .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 01:30, 09-08-2005 | #15