Подтвердить что ты не робот

Что означает \\?\При добавлении к пути к файлу

Я нашел ссылку на файл в журнале, который имел следующий формат:

\\?\C:\Path\path\file.log

Я не могу найти ссылку на то, что означает последовательность \? \. Я считаю, что часть между обратными косыми чертами относится к имени хоста.

Например, на моем компьютере с Windows следующее работает очень хорошо:

dir \\?\C:\

а также просто отлично с тем же результатом:

dir \\.\C:\

Вопросы:

  • Есть ли ссылка на то, что знак вопроса означает в этом конкретном формате пути?
  • Что может создать путь к файлу в таком формате?
4b9b3361

Ответ 1

Долгое чтение, но стоит прочитать, если вы находитесь в этом домене: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx

Выдержка:

В API Windows много функций, которые также имеют версии Unicode для разрешить длину с расширенной длиной для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов разделенные обратными косыми чертами, каждая до значения, возвращаемого в lpMaximumComponentLength параметра GetVolumeInformation(это значение обычно составляет 255 символов). Чтобы указать расширенный путь, используйте префикс "\\?\". Например, "\\?\D:\very long path".

и

Префикс "\\?\" также может использоваться с путями, построенными в соответствии с универсальное соглашение об именах (UNC). Чтобы указать такой путь, используя UNC, используйте префикс "\\?\UNC\". Например, "\\?\UNC\server\share", где "server" - имя компьютера, а "share" - имя общая папка. Эти префиксы не используются как часть пути сам. Они указывают, что путь должен быть передан системе с минимальной модификацией, что означает, что вы не можете использовать слэш для представления разделителей путей или период для представления текущий каталог или двойные точки для представления родительского каталога. Поскольку вы не можете использовать префикс "\\?\" с относительным путем, относительные пути всегда ограничены общим количеством символов MAX_PATH.

Ответ 2

API Windows анализирует входные строки для ввода-вывода файлов. Помимо всего прочего, он преобразует / в \ как часть преобразования имени в имя NT-стиля или для интерпретации псевдо-каталогов . и ... За некоторыми исключениями API Windows также ограничивает имена путей до 260 символов.

documented Цель префикса \\?\:

Для ввода/вывода файлов префикс "\\? \" к строке пути сообщает APIу Windows отключить весь синтаксический анализ строки и отправить строку, которая следует за ней прямо в файловую систему.

Это позволяет использовать . или .. в именах путей, а также отменять ограничение имени пути в 260 символов, если базовая файловая система поддерживает большие пути и имена файлов.