|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
Есть большая прога (не моя). Настройки юзера хранит в HKEY_CURRENT_USER\Software\Microsoft\Proga Настроек до фига. Всех ветвлений и параметров не знаю и знать не хочу, причем подветка или параметр не обязательно присутствуют (набор не известен). Задачи: 1) сохранить ветку целиком в backup-файл 2) восстановить ее оттуда Существенным условием является что действия выполняются от имени HKEY_CURRENT_USER со своей веткой, а он по дефолту ноль без палочки (т.е. НЕ администратор). 1. Вариант очевидный и простой (regedit аля cmd-утилита reg.exe) Код: vbnet 1. 2.
Увы, НЕ катит из-за так сказать несовершенства формата "Windows Registry Editor Version 5.00". А не катит потому, что прога допускает для некоторых REG_SZ перенос строки, в текстовухе .reg это чудо при экспорте перенесется на 2 строки, при импорте параметр назад не запишется, будет глюк и при определенных действиях Proga сделает crash. 2. Второй вариант - тупо сохранять все ветви/параметры по одному. Т.к. "до фига. Всех ветвлений и параметров не знаю и знать не хочу, причем подветка или параметр не обязательно присутствуют (набор не известен)", то НЕ катит и НЕ вариант, проще повеситься. 3. Третий вариант - он у меня давно на вооружении, все ф-ции написаны и отточены, работает как часы. Использует RegSaveKey , RegSaveKeyEx , RegRestoreKey Ветка сохраняется в бинарник, а не в .reg, в общем-то импорт-экспорт работает идеально ( под админом!!! ) Приведу кусок ".Net"-кода под спойлером (чтоб не голословно), потом о проблеме . Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121.
А проблема в том что RegSaveKey/RegSaveKey требуют The calling process must have the SE_BACKUP_NAME privilege enabled. и аналогично RegRestoreKey The calling process must have the SE_RESTORE_NAME and SE_BACKUP_NAME privileges Код мой естественно это учитывает и вызывает Код: vbnet 1. 2.
, но AdjustTokenPrivileges без прав админа не работает: Код: vbnet 1.
Юзер сам себе, своему процессу, привелегий SE_BACKUP_NAME, SE_RESTORE_NAME and SE_BACKUP_NAME присвоить не может. Итого, код требует админа, под просто юзер работать не будет . Несмотря на то что ветка HKEY_CURRENT_USER и юзеру надо сохранить свою ветку, казалось бы. Вопросы. 1. М.б. кто знает еще разумные варианты импорта/экспорта ветки реестра HKEY_CURRENT_USER(не .reg, не вариант 2 и не вариант 3)? Чтоб работал от имени этого CURRENT_USER (без админов)? 2. "Третий вариант" в общем случае бесправного юзера вылечить можно? Предположительный ответ - НЕТ. 3. Допустим я говорю. "Ладно, вызываем админа в помощь". Запустить другое приложение "из-под бесправного юзера" с запросом прав админа при запуске этого другого я умею. Но я должен как-то передать в это другое параметр: CURRENT_USER, потому как "админ" не обязательно совпадает с CURRENT_USER. Поясню, моя ветка реестра: HKEY_CURRENT_USER\ Она соответствует в моем случае вот такой: HKEY_USERS\S-1-5-21-2878779045-650142709-39536251-1001\ И лезть "админу" очевидно надо будет именно туда, а не в CURRENT_USER Как мне вычислить свою строку S-1-5-21-2878779045-650142709-39536251-1001 (для себя бесправного)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 04:31 |
|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
Как мне вычислить свою строку S-1-5-21-2878779045-650142709-39536251-1001 (для себя бесправного)? Код: vbnet 1.
И соответственно, перезапустившись под админом и передав strSID в качестве параметра, импортировать/экспортировать HKEY_USERS\strSID\Software\… вместо HKEY_CURRENT_USER\Software\… Но вот все-таки не нравится, и ветка "моя", и сохраняю для себя, "As Admin" как то не в кассу здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 05:00 |
|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
2. "Третий вариант" в общем случае бесправного юзера вылечить можно? Предположительный ответ - НЕТ. Третий мой вариант эквивалентен Код: vbnet 1. 2.
При запуске из НЕадминской cmd точно также требует админа: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 05:34 |
|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
Дмитрий77, Вы хотите прав админа без админа? Можно. Напишите сервис, который будет стартовать под админскими правами и пусть он возвращает нужные вам данные ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 10:50 |
|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
Cat2Вы хотите прав админа без админа? Cat2, Вы невнимательны. Я хочу ветку реестра (пользовательскую), этим пользователем корректно экспортировать/импортировать (без прав админа, что вполне таки логично, т.к. пользователь хозяин своего HKEY_CURRENT_USER). Но к сожалению процедуры Backup/Restore (которые только корректны в моем случае, почему написал сверху) работают только под админом. В отличии от процедур Export/Import (в .reg файл) которые админа не требуют, но мне к сожалению не подходят. Посему "админа" таки запускать придется. А как это реализовать у меня вопросов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 18:17 |
|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
Cat2, Хотя я кажется понял что Вы хотели сказать. Некий сервис запущен с админскими правами. Юзер передает сервису "задание", требующее админских прав, сервис это задание выполняет (для юзера). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 18:39 |
|
Экспорт/импорт ветки реестра целиком (HKEY_CURRENT_USER), проблемы однако
|
|||
---|---|---|---|
#18+
Дмитрий77Cat2, Хотя я кажется понял что Вы хотели сказать. Некий сервис запущен с админскими правами. Юзер передает сервису "задание", требующее админских прав, сервис это задание выполняет (для юзера). Именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2018, 21:19 |
|
|
start [/forum/search_topic.php?author=edhome&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 621ms |
total: | 888ms |
0 / 0 |