Что такое & ldquo; \ ?? \ & rdquo; префикс в NTFS? [Дубликат]

19
задан Ben Voigt 2 August 2014 в 03:37
поделиться

2 ответа

\?? - это каталог виртуальных объектов ядра, в котором диспетчер объектов ищет локальные и глобальные символические ссылки устройства DOS. Сначала он проверяет локальные ссылки на устройства DOS для сеанса входа пользователя в \Sessions\0\DosDevices\[Logon_AuthenticationId]. Затем он проверяет ссылки на глобальные устройства DOS в \Global??. Еще в старые времена NT использовал один каталог \DosDevices. В настоящее время \DosDevices является ссылкой на \??. Кроме того, в каждом локальном каталоге устройств DOS есть ссылка «Глобальная», чтобы разрешить доступ к глобальным устройствам, когда локальное устройство затеняет глобальное (например, \\?\Global\Z:) или разрешить драйверу устройства создавать глобальное устройство, если оно не выполняется в системе нить.

В пользовательском режиме библиотека времени выполнения в файле ntdll.dll преобразует полностью определенный путь DOS / Windows к пути NT путем добавления \??\ для буквы диска или замены ведущего \\ Путь UNC с \??\UNC\ - за исключением путей \\?\ и \\.\ локального устройства просто заменяется на \??\. Но сначала путь устройства \\.\ претерпевает некоторую предварительную обработку, например, разрешение «.». и "..", тогда как \\?\ обходит все предварительную обработку пользовательского режима.

Например, обычно \\?\C:\Windows преобразуется в \??\C:\Windows, который разрешает \Global??\C:\Windows. Устройство DOS с буквой «C:» является символической ссылкой на устройство громкости NT. Конечная цель зависит от системы. Например, конечный путь NT может разрешить \Device\HarddiskVolume2\Windows.

Соединения устройств DOS, такие как Volume{00000000-0000-0000-0000-000000000000}, создаются диспетчером точки монтирования. Это клей между постоянными буквами дисков, точками монтирования NTFS и используемым в данный момент устройством тома NT, например \Device\HarddiskVolume2.

10
ответ дан eryksun 28 August 2018 в 03:03
поделиться

Насколько я могу понять, оба \\?\ и \??\ относятся к локальному пространству имен локальных DOS-устройств, но действительны в разных контекстах.

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

\??\ имеет смысл как для ядра, так и для Win32 , однако большинство приложений Win32 (включая cmd.exe) не понимают этого.

В конкретных примерах OP: точки соединения и точки монтирования могут содержать либо пути Win32, либо ядра, но обычно содержат пути ядра и dir просто представляет исходное содержимое без изменений. Предполагается, что WMIC намеренно преобразует путь ядра в путь Win32 или получает данные от функции API, которая делает это.

5
ответ дан Harry Johnston 28 August 2018 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: