Здравствуйте, Аноним, Вы писали:
А>Имеется хендл открытого файла. Можно ли по нему узнать имя и путь этого файла?
DWORD GetModuleFileName(
HMODULE hModule, // handle to module to find filename for
LPTSTR lpFilename, // pointer to buffer for module path
DWORD nSize // size of buffer, in characters
);
Здравствуйте, AlexandrN, Вы писали:
AN>Здравствуйте, Аноним, Вы писали:
А>>Имеется хендл открытого файла. Можно ли по нему узнать имя и путь этого файла? AN>
AN>DWORD GetModuleFileName(
AN> HMODULE hModule, // handle to module to find filename for
AN> LPTSTR lpFilename, // pointer to buffer for module path
AN> DWORD nSize // size of buffer, in characters
AN> );
AN>
Да ну, что вы. Это HMODULE это дескриптор запущенного приложения (или DLL), а совсем не открытого файла. Не поможет здесь GetModuleFileName.
В NT были какие-то системные функции, названия, пардон, не помню. Можно поискать по форуму, такая тема уже поднималась.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Привет!
PD>Unknown wrote: >> >> Имеется хендл открытого файла. Можно ли по нему узнать имя и путь этого файла?
PD>Только недокументированными средствами.
PD>NtQueryInformationFile из ntdll.dll, класс информации PD>FileNameInformation
С чегой то NtQueryInformationFile попала в класс недокументированных? Учитывая, что NtQueryInformationFile является шлюзом к вызову ядра ZwQueryInformationFile, которая как раз документирована в DDK, стоит ее признать "условно документированной"
TC>С чегой то NtQueryInformationFile попала в класс недокументированных? Учитывая, что NtQueryInformationFile является шлюзом к вызову ядра ZwQueryInformationFile, которая как раз документирована в DDK, стоит ее признать "условно документированной"
Тогда уж, условно-досрочной.
V>Обработку ошибок и закрытие хендлов оставляю в качестве домашней работы.
Ну вот, приехали... И что — прикажете psapi.dll за собой в качестве redistr таскать?
Windows NT/2000 or later: Requires Windows NT 4.0 or later.
Header: Declared in Psapi.h.
Library: Use Psapi.lib.
На мой взгляд, метод с ZwQueryInformationFile гораздо удобнее и переносимее... Хотя, конечно, метод интересный
Впрочем, на вкус и цвет... Впрочем, это все уже тут обсуждалось и не раз, и насколько я помню, был даже показан способ получать это имя под 9х.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, TarasCo, Вы писали:
TC>>С чегой то NtQueryInformationFile попала в класс недокументированных? Учитывая, что NtQueryInformationFile является шлюзом к вызову ядра ZwQueryInformationFile, которая как раз документирована в DDK, стоит ее признать "условно документированной" LD>Тогда уж, условно-досрочной.
Я перекрывал функции CreateFile и CloseHandle для своего процесса, и вел таблицу соответствия между хэндлом и именем файла. Работало и в Win95-98 и WinNT-2k-xp. Но это только для хэндлов "родного" процесса.