Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   Синтаксис имён и значений параметров реестра (http://forum.oszone.net/showthread.php?t=335537)

Plum 29-06-2018 19:55 2820042

Синтаксис имён и значений параметров реестра
 
Уважаемые форумчане, давно обратил внимание, но пока нигде не нашел объяснения.
В реестре довольно часто встречаются записи, как в именах параметров так и в значениях, начинающиеся с \??\ и @
К примеру:
Параметр
Код:

[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"

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

mwz 29-06-2018 20:46 2820045

Цитата:

Цитата Plum
если с символом @ более или менее понятно - значение по умолчанию »

Тоже нет: собака как символ-заменитель "По умолчанию" находится в reg-файлах слева от знака равенства и стоит в гордом одиночестве.

Здесь же [во FriendlyTypeName] это означает "Использовать ресурс номер -10151 библиотеки shell32.dll"

Iska 29-06-2018 23:59 2820062

Цитата:

Цитата Plum
то с \??\, особенно стоящим в начале существующего пути, не очень. »

Naming Files, Paths, and Namespaces | Microsoft Docs.

Цитата:

Цитата Plum
Так же хотелось бы услышать мнение специалистов, насколько целесообразно редактирование таких записей. »

Нецелесообразно редактирование никаких записей в реестре, если Вы не понимаете, что делаете, для чего делаете, какие последствия будут.

mwz 30-06-2018 11:07 2820089

Plum, ну и в качестве примера-курьёза.

С учётом информации по ссылке, данной Iska:



попробуйте создать такую кунсткамеру:



штатными средствами.

Решение под спойлером.

Скрытый текст
Штатно использованы штатные Naming Files.



В некоторых случаях, как на скриншоте, префикс \\.\ недокументированно работает как \\?\ — но это не значит, что они взаимозаменяемы. Во избежание неожиданных для себя эффектов надо всегда использовать документированные формы записи.

Plum 02-07-2018 14:39 2820296

Цитата:

Цитата mwz
в качестве примера-курьёза. »

Это знакомо еще из DOS, как и папки без имён
Но то о чем я спрашивал, не имеет к этому отношения.
Скорее всего, IMHO, здесь имеет место подмена путей в 64-битной системе

Iska 02-07-2018 15:02 2820299

Plum, разрядность ОС тут никаким боком.

Plum 02-07-2018 15:31 2820302

Тогда почему в начале пути стоит \??\ :confused:

x0r 02-07-2018 16:24 2820310

Это все чтоб снять ограничения пути к файлу в 256символов. ф-ции WinAPI имею проверку на этот самый "префикс пути" (\??\) и если он есть, то вызывается Unicode ф-ция для обработки значения.
Naming Files, Paths, and Namespaces

Iska 02-07-2018 16:28 2820311

Цитата:

Цитата Plum
Тогда почему в начале пути стоит \??\ »

Plum, я кому выше ссылку приводил, а?! Совсем не читаете, что ли? Ну, вот Вам от коллеги x0r та же ссылка ещё раз, уже даже с якорем на непосредственно раздел. Читайте, коллега, читайте.

Plum 02-07-2018 17:50 2820321

Я как раз читаю и стараюсь внимательно, и пункт:
Цитата:

because the "\\?\" prefix may be expanded to a longer string by the system at run time ...
Так же чуть выше:
Цитата:

Цитата mwz
В некоторых случаях, префикс \\.\ недокументированно работает как \\?\ — но это не значит, что они взаимозаменяемы. »

тоже прочел, но не нашел утверждения, что префикс "\\?\" соответствует "\??\", тем более что он встречается в местах, где в снятии ограничения длины пути нет никакой необходимости.
Я к сожалению далек от WinAPI и программирования вообще, просто обратил внимание на не совсем понятные для меня записи в реестре. :sorry: Прийдется учить матчасть.
Всем большое спасибо за участие.

Iska 02-07-2018 20:21 2820342

Plum, это даже не WinAPI, это глыбже ;): путь с использованием префикса \??\ — это путь во внутреннем NT-формате. Например:
Файловые операции с использованием Native API
Обход ограничений FAT32/NTFS
Создание процесса с использованием Native API
Project Zero: The Definitive Guide on Win32 to NT Path Conversion

По префиксу же \\?\ самый простой пример Вы можете увидеть при использовании утилиты mountvol. Просто откройте командную строку, наберите в ней «mountvol.exe» и нажмите «Enter».

Far Manager позволяет работать и с тем, и с другим видом путей (даже для томов, не имеющих назначенной буквы):
Скрытый текст


Update: И ещё, решил добавить Вам на «почитать», для небольшого экскурса, насколько всё сложнее, нежели кажется, и какие глыбы кода скрыты за такой, казалось бы «простенькой» функцией WinAPI, как CreateProcess: Исследование CreateProcess.

x0r 02-07-2018 21:52 2820352

Шо значит мало?! Сарочка тоже кричала мало, а потом няньчила пятерых бандитов, не считая девочек




Время: 12:44.

Время: 12:44.
© OSzone.net 2001-