|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Система x64 Приложение компилируется/запускается как 32-бит (не обсуждаемое условие) Надо поменять чего-нибудь в реестре, в 64-битной ветке без авто-редиректов в WOW6432Node Собственно записать-прочитать, нет проблем, KEY_WOW64_64KEY Но допустим, нет прав, но под админом их можно обрести (смена владельца, задание прав). Как дать права, это все умею. НО. SE_OBJECT_TYPE enumeration Код: vbnet 1. 2. 3. 4. 5. 6.
Полезет в 32-битную WOW6432Node. Обойти можно? Есть такой ход конем Wow64DisableWow64FsRedirection function Код: plaintext 1. 2. 3.
Но прокатит ли это с реестром? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 04:11 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Дмитрий77, А что именно записывать собрался? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 07:17 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Petro123А что именно записывать собрался? Ой, много у меня там. Например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\... HKEY_CLASSES_ROOT\CLSID\... HKEY_CLASSES_ROOT\Interface\... Причем многое из того чего писать, на x64 надо дублировать в основную ветку и в WOW6432Node. На многие из целевых ключей (если уже они уже есть), стоит TrustedInstaller + нет полного доступа для админов, т.е. просто тупо записи админом (ф-ции реестра с KEY_WOW64_64KEY) не достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 12:51 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Дмитрий77HKEY_CLASSES_ROOT\CLSID\... HKEY_CLASSES_ROOT\Interface\... COM объекты? Свой инсталлятор? ... Просто мало кто на таком нижнем уровне API работает. Вот и поинтересовался. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 13:09 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Petro123, 21283557 там ссылки на зипы, в зипах есть reg-файлы, собственно на эту тему и развлекаемся типа свой инсталлятор-реаниматор Просто мало кто на таком нижнем уровне API работает. Здесь к сожалению только API. Но слава богу, это все мной наработано за годы, т.е. есть готовые ф-ции в том числе для смены прав и владельца. Счас тесты накатаю, буду смотреть как с правами в 64-битной ветке бороться из-под 32-бит App. (проблем скомпилировать x64 app как бы нет, но не хочется плодить зоопарк, а сделать все из единого кода). Wow64DisableWow64FsRedirection возможно и прокатит, ее только аккуратно вставлять надо и потом отменять. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 13:34 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Дмитрий77типа свой инсталлятор-реаниматорпонятно. Я использовал готовые библиотеки для MSI и указывал только ветки. Дмитрий77из-под 32-бит App. Это ограничение и не обсуждается? Ведь сам инсталлятор это не приложение. Его вполне можно отдельно сделать. Или у вас приложение само себя инсталлирует? Не врублюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 14:13 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Дмитрий77Wow64DisableWow64FsRedirection возможно и прокатит, Для реестра не работает сделал HKEY_CLASSES_ROOT\CLSID\TestKey с владельцем TrustedInstaller HKEY_CLASSES_ROOT\Wow6432Node\CLSID\TestKey с владельцем Администраторы Запрашиваю владельца, пишет "BuiltIn\Администраторы", если удалю ключ в Wow6432Node, пишет Err2 Файл не найден Т.е лезет однозначно в Wow6432Node Т.е. Wow64DisableWow64FsRedirection только для файловой системы работает. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 14:24 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Ну, я пришел к печальному выводу, что задача (с поставленными условиями) не имеет решения от слова вообще. Ну например вот здесь пытались ее решить: SetNamedSecurityInfo for a 64Bit registry key from a 32Bit Process Здесь как бы вот. 1) Применительно к поставленной задаче по факту (вроде как) имеем а) Либо ветка реестра уже есть, тогда там уже есть все параметры и ничего делать не надо (соответственно и права менять не надо). б) Либо ветки реестра нет, но тогда дефолтных прав админа достаточно чтобы ветку создать и все параметры туда записать (что естественно не проблема, KEY_WOW64_64KEY и вперед) Возникает конечно опасение ситуации, что ветка есть, какого-нибудь параметра там нету, или неправильный, а прав нету (но вроде такого быть не может). Поэтому разумно написать инсталлятор без "выяснения прав", + логировать, а там уж смотреть. 2) Можно да, скомпилировать отдельно 64-битный код. Но, я без крайней необходимости это делать не люблю. Т.е. практика, пишется один код (компилируется 32 бит), а уж там по кейсам он выясняет что за OS и что и куда писать. Зоопарка итак хватает, усугублять его бы не хотелось. Ну, и как минимум это должен быть единый проект компилируемый и так и эдак (чтобы не поддерживать 2 параллельных проекта, обязательно что-нибудь куда-нибудь забудешь перенести). Any CPU да, но я бы не рисковал, с ним бардак еще тот. У меня напр. в 2013-й студии (win10 X64) Any CPU Debug дефолтный .Net 4.5 проект работает как 32-бит, почему не выяснял но меня устраивает, потом делаю копию и рожаю exe x86 Release чтоб наверняка и однозначно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 15:23 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Случайно вернулся к вопросу, надо одну мелочь подправить... Дмитрий77 Система x64 Приложение компилируется/запускается как 32-бит (не обсуждаемое условие) Надо поменять чего-нибудь в реестре, в 64-битной ветке без авто-редиректов в WOW6432Node Собственно записать-прочитать, нет проблем, KEY_WOW64_64KEY Но допустим, нет прав, но под админом их можно обрести (смена владельца, задание прав). Как дать права, это все умею. НО. SE_OBJECT_TYPE enumeration Код: vbnet 1. 2. 3. 4. 5. 6.
НО однако же, нормально так MS доки задним числом переписывает: https://docs.microsoft.com/en-us/windows/win32/api/accctrl/ne-accctrl-se_object_type Код: plaintext 1. 2. 3. 4. 5. 6. 7.
При этом нуль описания для SE_REGISTRY_WOW64_64KEY, и как бы MSMinimum supported client Windows XP [desktop apps only] Minimum supported server Windows Server 2003 [desktop apps only] Я не поленился проверить: Win 10 (Win 2016/2019) - SE_REGISTRY_WOW64_64KEY делает ровно то что хотелось. Win 8.1 (Win 2012R2); Win7 -не работает, пишет Err87 Параметр задан неверно при попытке его использовать Т.е. они таки добавили эту "фичу" в десятке. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 06:23 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
не проще использовать типы .net и не мучить попу? Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 07:40 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Roman Mejtes, Хоть бы перечитал об чем речь что-ли. А речь идет о "SECURITY OBJECTS" - то что описывается словами Разрешения-Безопасность-Security-Владелец (Owner), права на чтение-запись в ветку реестра для разных пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 08:11 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 08:32 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Roman Mejtes, Ну не то чтоб убедил, но у меня тогда помнится засада была со сменой "владельца" ветки, а не с правами. И в .NET это как бы не получалось от слова вообще (на api получилось только 64-битным кодом). Ну OK, счас как бы более простая задача. Надо взять определенный ключ реестра (у админа все права есть и от него запускаем). И надо для группы "Users (Пользователи)" // ConstructUniversalAndNTWellKnownSids("Users") добавить "Read"/Allow //GENERIC_READ + ACCESS_MODE.GRANT_ACCESS И плюс еще чтоб "Этот раздел и его подразделы" //CONTAINER_INHERIT_ACE Or OBJECT_INHERIT_ACE Ну и естественно все это из 32-битного кода чтоб на x64 попадали в 64-битную ветку (на x86 соотв. в единственную). Вроде все сформулировал. (важен каждый пункт сформулированного) На .NET осилится? (не хочу как говорится "попу мучить", если у тебя рука набита быстро ответ дашь). Но у меня нет 100% уверенности что ответ будет ДА хотя очень бы хотелось. Просто SE_REGISTRY_WOW64_64KEY что я счас случайно нашел конечно хорошо (и "все давно вымучено"), но это только для Win10. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 09:16 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
хватит делать велосипед с квадратными колёсами, всё работает, лично проверил ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 10:11 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Roman Mejtes, Как группу "Users" вычислить? Вместо WindowsIdentity.GetCurrent().User ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 10:22 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Дмитрий77, Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 10:38 |
|
Реестр, надо из 32-битного приложения сменить права/владельца 64-битной ветки
|
|||
---|---|---|---|
#18+
Roman Mejtes, спасибо нашел уже. Да так работает все что описал что надо: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Мне это не нравилось, потому что я всегда дублирую .NET 4.5 (для >=Vista) и .NET 2.0 (xp/2003) - пока от этой привычки не ушел. Мне в данном случае надо только по условию >=Vista, но все одно придется комментировать код при делании .NET 2.0 exe-шника, чего я без крайней необходимости делать не люблю. В .NET 2.0 нету .OpenBaseKey и RegistryView. Но это ладно, я подумаю. А по поводу "хватит делать велосипед с квадратными колёсами, всё работает, лично проверил", там в .NET какая-то большая задница с взятием привелегии SE_TAKE_OWNERSHIP_NAME, вот бодались когда-то: А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.? , Но вот это точно продолжать обсуждать неохота. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 10:54 |
|
|
start [/forum/topic.php?fid=20&fpage=10&tid=1398539]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 250ms |
total: | 403ms |
0 / 0 |