· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› FileName from HANDLE

Посл.отвђт Сообщенiе


Дата: Мар 25, 2004 18:45:54

Камрады, помогите плиз получить имя файла из открытого HANDLE, желательно документированными ср-вами.


Дата: Мар 25, 2004 19:15:41 · Поправил: Dr.Golova

Поисковиками пользоваться религия не позволяет?

hXXp://msdn.microsoft.com/library/default.asp?url=/library/en-us/filei o/base/obtaining_a_file_name_from_a_file_handle.asp


Дата: Мар 25, 2004 19:18:55

Ахтунг! Форум глючит - в линке убери пробел в слове fileio


Дата: Мар 26, 2004 13:24:20

спасибо, но до этого я как раз сам допер.
странно, я не нашел этого в msdn который с VS.NET шел, старый наверное.
Просто способ прямо скажем через одно место, думал есть более другой, проще.


Дата: Мар 26, 2004 13:37:24

я не нашел этого в msdn который с VS.NET
Есть он там, делаешь поиск по фразе
"obtaining a file name from a file handle" - будет всего 2 ссылки.
Проще нет, можно сложнее придумать :)


Дата: Мар 26, 2004 13:59:55 · Поправил: MarsRover

у меня MSDN 2001, там такое не находится :)

Кстати, проблема то изначально была вот в чем:
при обработке LOAD_DLL_DEBUG_EVENT нужно получить имя dll.
WinXP SP1

1) можно через DEBUG_EVENT.u.LoadDll.lpImageName и ReadProcessMemory(). Но указатель по адресу lpImageName очень часто NULL (я заметил, что он NULL когда dll подгружается через LoadLibrary(), а не из таблицы импорта).

2) Можно через PSAPI и DEBUG_EVENT.u.LoadDll.lpBaseOfDll
(GetModuleFileNameEx), но этот способ не работает наоборот, когда через таблицу импорта грузится. (видать в момент обработки LOAD_DLL_DEBUG_EVENT модуль еще не занесен в список, т.к. EnumProcessModules() его не видит).

3) Можно через DEBUG_EVENT.u.LoadDll.hFile, указанным Dr. Golova способом. Но судя по описанию LOAD_DLL_DEBUG_INFO hFile может тоже быть NULL.

Вопрос:
Неужели нет универсального надежного способа получить имя файла DLL при обработке LOAD_DLL_DEBUG_EVENT?
Сейчас использую все 3, пока какой-либо не даст результата.
3-й оказался самый надежный.
1 и 2 оказались взаимоисключаюими (тоесть если работает 1 то не работает 2, и наоборот).


Дата: Мар 27, 2004 11:27:44


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046