Преобразовать ImageName драйвера в "нормалное" имя.

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 26 апр 2009.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Функция NtQuerySystemInformation(SystemModuleInformation, ...) возвращает названиая файлов в неком странном формате. Наример \SystemRoot\system32\drivers\test.sys. Есть ли стандартный API который преобразует такое имя файла в формат понимаемый обычными функциями пользовательского режима (например CreateFile)?
     
  2. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    http://x64.blog.ru/51061171.html
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Стандартных API для преобразования таких имён нет, более того, если говорить конкретно об именах модулей, то они могут лежать там в формате

    system32\drivers\test.sys

    или даже

    \Windows\System32\test.sys

    и в этих случаях даже ZwCreateFile() с последующим вызовом ZwQueryInformationFile(..., FileNameInformation, ...) не поможет. Значит, что делать в этом случае? Очевидно, что писать собственную функцию преобразования, учитывая правила, по которым такие имена генерируются. Правил этих немного и написать собственную рабочую функцию более чем реально.

    Да, следите за блогом (например, через RSS), - следующее сообщение будет посвящено решению этой проблемы.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    http://x64.blog.ru/#post65586307
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    RtlVolumeDeviceToDosName
    RtlNtPathNameToDosPathName
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    К сожалению, эта функция не делает того, что нужно автору.

    К сожалению, эта функция не экспортируется ядром, и я не уверен, что она корректно работает с сетевыми дисками. К тому же в случае с неполными путями она не поможет.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    x64
    Как это не делает? Открыть файл, взять девайс, конвертнуть через RtlVolumeDeviceToDosName и соединить с именем файла. Если имя в формате \SystemRoot\....

    Насчет второй прогнал, извиняюсь.
    А с неполными путями апи, разумеется, нет. Надо писать свою. Но правила там простые.
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да можно, конечно, но тут есть как минимум две проблемы из-за которых то, что ты предлагаешь, - работать попросту не будет. Почему именно - оставляю вам на домашнее задание.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    x64
    Прям щас вот так не вспомню, я бы посмотрел, но сейчас времени крайне в обрез. Поэтому увы, сегодня без домшнего задания домой пойдём -)
    Хотя на самом деле, конечно, вручную и проще и, раз ты говоришь, что есть проблемы с RtlXX, то и надежнее.
    Но все равно любопытно. Поскольку, собственно, таким преобразованием я не занимался. Один раз эту функцию в жизни вызывал :) Другая специализация
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это символическая ссылка. Можно её раскрыть NtOpenSymbolicLinkObject/NtQuerySymbolicLinkObject. У меня это "\Device\Harddisk0\Partition2\WINDOWS". Тоесть D:\WINDOWS.