Функция NtQuerySystemInformation(SystemModuleInformation, ...) возвращает названиая файлов в неком странном формате. Наример \SystemRoot\system32\drivers\test.sys. Есть ли стандартный API который преобразует такое имя файла в формат понимаемый обычными функциями пользовательского режима (например CreateFile)?
Стандартных API для преобразования таких имён нет, более того, если говорить конкретно об именах модулей, то они могут лежать там в формате system32\drivers\test.sys или даже \Windows\System32\test.sys и в этих случаях даже ZwCreateFile() с последующим вызовом ZwQueryInformationFile(..., FileNameInformation, ...) не поможет. Значит, что делать в этом случае? Очевидно, что писать собственную функцию преобразования, учитывая правила, по которым такие имена генерируются. Правил этих немного и написать собственную рабочую функцию более чем реально. Да, следите за блогом (например, через RSS), - следующее сообщение будет посвящено решению этой проблемы.
К сожалению, эта функция не делает того, что нужно автору. К сожалению, эта функция не экспортируется ядром, и я не уверен, что она корректно работает с сетевыми дисками. К тому же в случае с неполными путями она не поможет.
x64 Как это не делает? Открыть файл, взять девайс, конвертнуть через RtlVolumeDeviceToDosName и соединить с именем файла. Если имя в формате \SystemRoot\.... Насчет второй прогнал, извиняюсь. А с неполными путями апи, разумеется, нет. Надо писать свою. Но правила там простые.
Да можно, конечно, но тут есть как минимум две проблемы из-за которых то, что ты предлагаешь, - работать попросту не будет. Почему именно - оставляю вам на домашнее задание.
x64 Прям щас вот так не вспомню, я бы посмотрел, но сейчас времени крайне в обрез. Поэтому увы, сегодня без домшнего задания домой пойдём -) Хотя на самом деле, конечно, вручную и проще и, раз ты говоришь, что есть проблемы с RtlXX, то и надежнее. Но все равно любопытно. Поскольку, собственно, таким преобразованием я не занимался. Один раз эту функцию в жизни вызывал Другая специализация
Это символическая ссылка. Можно её раскрыть NtOpenSymbolicLinkObject/NtQuerySymbolicLinkObject. У меня это "\Device\Harddisk0\Partition2\WINDOWS". Тоесть D:\WINDOWS.