Как привести эти имена (возвращаемые PsSetLoadImageNotifyRoutine) к нормальным? Причем тут несколько вариаций: 1. \Device\HarddiskVolume1\WINDOWS\system32\notepad.exe \Device\HarddiskVolume2\Soft\Total Commander\Totalcmd.exe из HarddiskVolume1 и HarddiskVolume2 можно сделать вывод что это диски C и D, но тут че возникакет вопрос, как будет выглядеть путь со второго жеского диска? Harddisk2Volume1 ? или чтото в этом роде? (просто нет под рукой второго винта чтобы проверить) 2. \WINDOWS\system32\mfc42.dll 3. \SystemRoot\System32\ntdll.dll тут вообще невозможно определить правильный путь (
1. У тебя абсолютный путь относительно корневой директории менеджера объектов без символьных ссылок. Это единственный уникальный вариант. И я бы, возможно, убедил тебя, что он - единственно "правильный" .) Но если тебе хочется обычный путь через C:\Windows\System32\лялялля, тогда тебе надо пройтись по всем дискам и посмотреть куда тычут их символьные ссылки. Когда найдешь диск X:, ссылка которого \Global??\X: указывает на \Device\HarddiskVolume1, тогда и заменяй это на X:. Получишь свой обычный путь. Это преобразование неоднозначно - несколько букв дисков могут указывать на один раздел, поэтому то, что ты получишь - не будет единственно верным ответом. 2. Это относительный путь от системного раздела, тут вообще не о чем говорить. Получаешь системный раздел, например, через резолв ссылки \SystemRoot 3. Абсолютный путь относительно корневого каталога менеджера объектов, но с символьной ссылкой. Разрешаешь ее обычным образом, а далее как в пункте 1 Дополнение к 1) применительно к системному разделу: Предпочтительнее для системного раздела получать не абы какую букву, а именно ту букву, которая везде в реестре прописана как системный диск. Найди любой подходящий ключ в реестре, где есть путь через системный диск, и вынь оттуда букву. Допустим, она X. Тогда \SystemRoot тоже самое что и X:\Windows. Пляши от этого, когда будешь резолвить \Device\HarddiskXPartitionY в буквы.
CrystalIC О_о, ты о чем это? )))))) Мне всего лишь нужно получить, нормальный путь (как в user mode) из информации которую возвращает PsSetLoadImageNotifyRoutine или PsSetCreateProcessNotifyRoutine: \Device\HarddiskVolume1\WINDOWS\system32\notepad.exe или PID процесса (хотя я ненашел ниодной не слишком замудренной реализации получения полного пути к процессу по его id)
GLEB Ааа точно, о чем это я Лан, забудь, я и сам не понял что написал, сегодня с утра крыша потекла сильно.
Неверно. Да, \Windows - это корневая папка системы, но она может называться и по-другому, например, \Device Что будешь делать в этом случае? Кроме того, для логического диска, отличного от системного, имена также могут приходить в относительном виде типа \Program Files\My App\mydll.dll. Так что, моё мнение - универсального способа получить имя загружаемой DLL на Windows до Vista просто не существует.
Извините конечно, что вмешиваюсь), но тема эта очень часто встречается, поэтому хотелось бы узнать в чем состоит задача т е для чего конкретно нужны эти имена? в чем смысл? зачем собственно нужен этот "правильный путь"?