Показать полную графическую версию : Синтаксис имён и значений параметров реестра
Уважаемые форумчане, давно обратил внимание, но пока нигде не нашел объяснения.
В реестре довольно часто встречаются записи, как в именах параметров так и в значениях, начинающиеся с \??\ и @
К примеру:
Параметр
[HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices]
"\\??\\Volume{0173d1c7-91cd-11e4-ab90-806e6f6e6963}"=hex:08,1b,09,1b,00,7e,00,\
00,00,00,00,00
Значение параметра
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SandBox\Parameters]
"JournalPath"="\\??\\C:\\ProgramData\\...."
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_13FD&PID_1150\0010100000000000\Device Parameters]
"SymbolicName"="\\??\\USB#VID_13FD&PID_1150#0010100000000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Memory Management]
"ExistingPageFiles"=hex(7):5c,00,3f,00,3f,00,5c,00,43,00,3a,00,5c,00,70,00,61,\
00,67,00,65,00,66,00,69,00,6c,00,65,00,2e,00,73,00,79,00,73,00,00,00,00,00
[HKEY_CLASSES_ROOT\inifile]
"FriendlyTypeName"="@shell32.dll,-10151"
[HKEY_CLASSES_ROOT\DeviceDisplayObject\InterfaceClass\{6994AD04-93EF-11D0-A3CC-00A0C9223196}\Shell\Audio]
"MUIVerb"="@DeviceCenter.dll,-830"
Так вот, если с символом @ более или менее понятно - значение по умолчанию, то с \??\, особенно стоящим в начале существующего пути, не очень.
Так же хотелось бы услышать мнение специалистов, насколько целесообразно редактирование таких записей.
если с символом @ более или менее понятно - значение по умолчанию »
Тоже нет: собака как символ-заменитель "По умолчанию" находится в reg-файлах слева от знака равенства и стоит в гордом одиночестве.
Здесь же [во FriendlyTypeName] это означает "Использовать ресурс номер -10151 библиотеки shell32.dll"
то с \??\, особенно стоящим в начале существующего пути, не очень. »
Naming Files, Paths, and Namespaces | Microsoft Docs (https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file).
Так же хотелось бы услышать мнение специалистов, насколько целесообразно редактирование таких записей. »
Нецелесообразно редактирование никаких записей в реестре, если Вы не понимаете, что делаете, для чего делаете, какие последствия будут.
Plum, ну и в качестве примера-курьёза.
С учётом информации по ссылке, данной Iska:
http://mwz-ru.homeserver.com/tests/artef1.gif
попробуйте создать такую кунсткамеру:
http://mwz-ru.homeserver.com/tests/artef3.gif
штатными средствами.
Решение под спойлером.
Штатно использованы штатные Naming Files.
http://mwz-ru.homeserver.com/tests/artef2.gif
В некоторых случаях, как на скриншоте, префикс \\.\ недокументированно работает как \\?\ — но это не значит, что они взаимозаменяемы. Во избежание неожиданных для себя эффектов надо всегда использовать документированные формы записи.
в качестве примера-курьёза. »
Это знакомо еще из DOS, как и папки без имён
Но то о чем я спрашивал, не имеет к этому отношения.
Скорее всего, IMHO, здесь имеет место подмена путей в 64-битной системе
Plum, разрядность ОС тут никаким боком.
Тогда почему в начале пути стоит \??\ :confused:
http://ipic.su/img/img7/fs/Clip455.1530534293.png
Это все чтоб снять ограничения пути к файлу в 256символов. ф-ции WinAPI имею проверку на этот самый "префикс пути" (\??\) и если он есть, то вызывается Unicode ф-ция для обработки значения.
Naming Files, Paths, and Namespaces (https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation)
Тогда почему в начале пути стоит \??\ »
Plum, я кому выше ссылку приводил, а?! Совсем не читаете, что ли? Ну, вот Вам от коллеги x0r та же ссылка ещё раз, уже даже с якорем на непосредственно раздел. Читайте, коллега, читайте.
Я как раз читаю и стараюсь внимательно, и пункт:
because the "\\?\" prefix may be expanded to a longer string by the system at run time ...
Так же чуть выше:
В некоторых случаях, префикс \\.\ недокументированно работает как \\?\ — но это не значит, что они взаимозаменяемы. »
тоже прочел, но не нашел утверждения, что префикс "\\?\" соответствует "\??\", тем более что он встречается в местах, где в снятии ограничения длины пути нет никакой необходимости.
Я к сожалению далек от WinAPI и программирования вообще, просто обратил внимание на не совсем понятные для меня записи в реестре. :sorry: Прийдется учить матчасть.
Всем большое спасибо за участие.
Plum, это даже не WinAPI, это глыбже ;): путь с использованием префикса \??\ — это путь во внутреннем NT-формате. Например:
Файловые операции с использованием Native API (http://hex.pp.ua/nt-native-api-file-operations.php)
Обход ограничений FAT32/NTFS (http://hex.pp.ua/fat32-ntfs-limitations.php)
Создание процесса с использованием Native API (http://hex.pp.ua/nt-native-create-process.php)
Project Zero: The Definitive Guide on Win32 to NT Path Conversion (https://googleprojectzero.blogspot.com/2016/02/the-definitive-guide-on-win32-to-nt.html)
По префиксу же \\?\ самый простой пример Вы можете увидеть при использовании утилиты mountvol. Просто откройте командную строку, наберите в ней «mountvol.exe» и нажмите «Enter».
Far Manager позволяет работать и с тем, и с другим видом путей (даже для томов, не имеющих назначенной буквы):
https://i.imgur.com/xfkZgJd.png
Update: И ещё, решил добавить Вам на «почитать», для небольшого экскурса, насколько всё сложнее, нежели кажется, и какие глыбы кода скрыты за такой, казалось бы «простенькой» функцией WinAPI, как CreateProcess: Исследование CreateProcess (http://hex.pp.ua/createprocess.php).
http://www.kolobok.us/smiles/icq/biggrin.gif
https://allisonmaruska.files.wordpress.com/2015/10/we-need-to-go-deeper.jpg
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.