Опубликовал вопрос в эфире, но видимо его мало кто читает, поэтому рискну повторить на форуме. Недавно натолкнулся на забавный "феномен". Поскольку основная идея была взята из GetImageFilePath (14 раздел в туторах от Four-F) решил проверить с помощью ProcessMon. Итак 1. На диске C: создаем каталог aa (имя не важно) и копируем туда например notepad.exe 2. Запускаем ProcessMon 3. Запускаем notepad из указанного каталога. ProcessMon вполне законно показывает что был запущен файл C:\aa\notepad.exe 4. Выключаем notepad 5. Переименовываем каталог например в bb 6. Запускаем notepad 7. И вот тут самое неожиданное - ProcessMon показывает что был запущен C:\aa\notepad.exe - хотя такого каталога на диске уже нет.... К слову сказать под XP+ для определения полного пути я использую несколько другой метод - но результат тем не менее тот-же. Может уважаемый Four-F или кто-нибудь еще сможет объяснить причину этого явления?
Небольшое, но существенное дополнение - глюк наблюдается только на NTFS - под FAT32 все отрабатывает нормально (проверялось под Win2K и XP). P.S.: Народ - вы видимо недооцениваете важность момента. А важность в том, что пример в одном из ключевых туторов по данной теме (во всяком случае я встретил на форуме около 10 ссылок на него и никакого другого примера не видел) дает некорректный результат. Справедливости ради надо отметить, что такой-же результат дает ObQueryNameString и ZwQueryInformationProcess. Что делать?
Не наблюдаю такого. Вот если не закрывать блокнот, а просто переименовать каталог/файл, то да - путь останется прежним, но и это детектится.
Ну про запущенном блокноте каталог тебе переименовать не даст. А если переименовать файл, а не каталог (в принципе можно и каталог тоже, но при выключенном блокноте) и перезапустить, то и файл и каталог отобразятся правильно. А вот то что не наблюдал странно - я воспроизвел многократно на разных машинах. Просто надо все проделать по шагам и на NTFS. И использовать именно ProcessMon от Four-F (из KmdKit) У меня вот такое предположение возникло: если переименовывается каталог, то файловый объект блокнота не меняется. Возможно он где-то кэшируется и используется повторно, а поскольку в нем изменений не было, то и полный путь не перечитавыется. Кстати если полный путь доставать из PEB, то все работает.
похоже, что такая проблема только на твоём компе - у меня на nt4, w2k sp4, xp pro, xp home, xp sp1, xp sp2 и w2k3 ничего подобного замечено не было.
RamMerLabs Я тоже было так подумал - поэтому проверил на нескольких компах (как 2000 так и XP все с последними апдейтами). Пока не нашел ни одного компа, где бы работало правильно (не учитывая FAT32). Надеюсь ты проверял с помощью ProcessMon?
и не только. на всякий случай проверю ещё раз. результаты - завтра, не все системы есть у меня дома - поеду в универ. все системы - на ntfs