PsSetLoadImageNotifyRoutine и имена файлов

Тема в разделе "WASM.NT.KERNEL", создана пользователем GLEB, 9 ноя 2008.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Как привести эти имена (возвращаемые 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

    тут вообще невозможно определить правильный путь (
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    1. У тебя абсолютный путь относительно корневой директории менеджера объектов без символьных ссылок. Это единственный уникальный вариант. И я бы, возможно, убедил тебя, что он - единственно "правильный" .)
    Но если тебе хочется обычный путь через C:\Windows\System32\лялялля, тогда тебе надо пройтись по всем дискам и посмотреть куда тычут их символьные ссылки. Когда найдешь диск X:, ссылка которого \Global??\X: указывает на \Device\HarddiskVolume1, тогда и заменяй это на X:. Получишь свой обычный путь.
    Это преобразование неоднозначно - несколько букв дисков могут указывать на один раздел, поэтому то, что ты получишь - не будет единственно верным ответом.

    2. Это относительный путь от системного раздела, тут вообще не о чем говорить. Получаешь системный раздел, например, через резолв ссылки \SystemRoot

    3. Абсолютный путь относительно корневого каталога менеджера объектов, но с символьной ссылкой. Разрешаешь ее обычным образом, а далее как в пункте 1

    Дополнение к 1) применительно к системному разделу:
    Предпочтительнее для системного раздела получать не абы какую букву, а именно ту букву, которая везде в реестре прописана как системный диск. Найди любой подходящий ключ в реестре, где есть путь через системный диск, и вынь оттуда букву. Допустим, она X. Тогда \SystemRoot тоже самое что и X:\Windows.
    Пляши от этого, когда будешь резолвить \Device\HarddiskXPartitionY в буквы.
     
  3. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    IoQueryFileDosDeviceName()
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    что-то я про нее не знал о чем она. надо глянуть будет что делает.)
     
  5. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    CrystalIC
    О_о, ты о чем это? ))))))

    Мне всего лишь нужно получить, нормальный путь (как в user mode) из информации которую возвращает PsSetLoadImageNotifyRoutine или PsSetCreateProcessNotifyRoutine: \Device\HarddiskVolume1\WINDOWS\system32\notepad.exe или PID процесса (хотя я ненашел ниодной не слишком замудренной реализации получения полного пути к процессу по его id)
     
  6. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    GLEB
    Ааа точно, о чем это я :lol:
    Лан, забудь, я и сам не понял что написал, сегодня с утра крыша потекла сильно.
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Неверно. Да, \Windows - это корневая папка системы, но она может называться и по-другому, например, \Device ;) Что будешь делать в этом случае? Кроме того, для логического диска, отличного от системного, имена также могут приходить в относительном виде типа \Program Files\My App\mydll.dll. Так что, моё мнение - универсального способа получить имя загружаемой DLL на Windows до Vista просто не существует.
     
  8. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Извините конечно, что вмешиваюсь), но тема эта очень часто встречается,
    поэтому хотелось бы узнать в чем состоит задача
    т е для чего конкретно нужны эти имена?
    в чем смысл? зачем собственно нужен этот "правильный путь"?