|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Ну делай тестовый проект на шарпе и кидай сюда. Посмотрим. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 23:17 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУ, Не пишу я на C#. Ну, вроде накидал. Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 00:22 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Попробуй запускать код от System. Для тестов своего exe используй psexec, вот тут пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 15:07 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУ, Я в курсе этой утилиты от Русиновича. Попробовал - не заработало. Да и не должно было. Смена владельца делается под администратором. Я думаю не заработает оно, не в коде дело, а в нетовской реализации. Бага 2 как минимум: 1) не реализован механизм взятия привелегии SE_TAKE_OWNERSHIP_NAME через token текущего процесса без которого смена владельца не возможна Отсюда ошибка: Запрошенный доступ к реестру запрещен Хотя по логике RegistryRights.TakeOwnership должен обеспечивать именно этот механизм. И даже если ее побороть извне, то 2) Метод SetAccessControl очевидно пытается впихнуть в объект все в куче, т.е. Dacl, Sacl и SidOwner. А на Dacl и Sacl прав нет. Отсюда ошибка: Не удалось выполнить запись в раздел реестра Так что забей наверно, приятного отпуска и с Наступающим. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 20:12 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77, спасибо, взаимно. А нафига вообще тебе этот беспощадный велосипед нужен? Сколько работаю с .NET, а до этого пилил на дельфи, никогда такого не требовалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 20:20 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУнафига вообще тебе этот беспощадный велосипед нужен? Конкретно с owner, жесть конечно, но если интересно: У меня в программе документ печатается из-под сервиса (SYSTEM) На Win 8/8.1 x64 есть проблема. Способ фиксации (от Microsoft) описан например здесь (в ответе за #1): Printing from windows service on windows 8 fails Сводится к удалению 3-х параметров из реестра из ветки, владельцем которой администратор не является и прав на удаление параметров не имеет. Т.е. аккуратный код делает админа owner, модифицирует dacl (дает право удалить параметры), удаляет параметры, модифицирует dacl назад и возвращает прежнего владельца. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 09:28 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Жесткач, конечно. А если вынести вот эту жуть конфигурацию в отдельный задокументированный админский таск, в котором он ручками подготавливает реестр и разворачивает сервис печати. Всё-таки сервис печати не должен сам лезть в такие дебри. Представь себе ситуацию, если была бы проблема с кольцом защиты ядра Ring0, которое не давало бы нормально печатать из сервиса. И что получается, сервис должен фиксить это? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 10:00 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Не бери в голову. Моя программа всего лишь делает printto (документ,выбранный пользователем принтер). И под System (когда запущена как сервис) на 8-ке это не работает в силу бага, который описан по ссылке. Пользователь моей проги как правило далек от админских задач, наивно полагать что он будет читать подобные доки, поэтому проще один раз имплементировать фикс в инсталлятор. Ты просто спросил зачем мне нужно менять Владельца, я привел пример, обсуждать "моральную сторону" я не готов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 10:28 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
На самом деле одна ошибка в этом коде есть, и странно что никто не заметил. Вот так надо: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но при этом без привелегий для процесса SE_TAKE_OWNERSHIP_NAME(назначить владельцем себя) и SE_RESTORE_NAME(назначить владельцем другого) работать не будет. А вот так типа наконец заработало (хоть что-то): Код: 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.
Net.-объект Process насколько я понял Security не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 04:01 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77Net.-объект Process насколько я понял Security не имеет. http://codearticles.ru/articles/2547 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 09:51 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77, .. если вы цивилизационно не против внешних утилит в инсталляторе, то посмотрите на SubInACL.exe ... она поддерживается Майкрософтом и заточена именно на манипуляции с правами/сменой владельца, и на реестр в том числе ... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 12:14 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУДмитрий77Net.-объект Process насколько я понял Security не имеет. http://codearticles.ru/articles/2547 Нет, это не то. Приведенный вами код - это Net-обертка над ShellExecuteEx function . И да - я это использую - чтобы запустить программу "Run As Administrator". То это вот это: Process Privileges Но это просто кто-то написал dll на базе тех же API, которые в моем коде - смысл? если я это умею делать сам. carrotikДмитрий77, .. если вы цивилизационно не против внешних утилит в инсталляторе, то посмотрите на SubInACL.exe ... она поддерживается Майкрософтом и заточена именно на манипуляции с правами/сменой владельца, и на реестр в том числе ... Опять же, нецивилизованно это - зачем мне внешний exe или внешняя dll, если я умею работать с API напрямую из своего кода, при этом еще понимая что я делаю. Это сойдет если надо сделать быстро и не знаешь/не хочешь врубаться в тему. Кстати, я работаю с правами не только из инсталлятора. Кроме реестра и папок/файлов есть еще например права на запуск/остановку/удаление сервиса. Пожалуй 3 вещи, которые мне нужны. Мне было интересно сделать полностью через .Net класс RegistrySecurity. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 15:56 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77МСУпропущено... http://codearticles.ru/articles/2547 Нет, это не то. Приведенный вами код - это Net-обертка над ShellExecuteEx function . И да - я это использую - чтобы запустить программу "Run As Administrator". Не фантазируй, чтобы запускать Run As Administrator, нужно делать манифест в проекте: Код: xml 1.
И тот велосипед выше вовсе не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 18:16 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУ, Делать такой манифест - это плохо и не рекомендовано MS. Правильно: Код: xml 1.
(asInvoker исключает нежелательную виртуализацию папок типа Program Files) С админским манифестом в нехороший довесок еще получаем нездоровый интерес со стороны антивирусов. А "велосипед" очень удобный. Я обычно делаю так. Exe-шник стандартно запущен под обычным пользователем. Если какое-то действо требует админа, то велосипедом запускаем себя самого (с Command -параметром) и возвращаем результат "админского исполнения" в неадминский текущий запуск. Если еще exe-шник подписан CodeSigning то это выглядит очень достойно. Код: 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.
Но мы сбились с темы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 18:56 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77МСУ, Делать такой манифест - это плохо и не рекомендовано MS. Почему плохо и где написано, что не рекомендовано MS? Обычно принято подкреплять такие громкие слова пруфом, если что. Дмитрий77Правильно: Код: xml 1.
(asInvoker исключает нежелательную виртуализацию папок типа Program Files) С админским манифестом в нехороший довесок еще получаем нездоровый интерес со стороны антивирусов. Кто сказал, что это "правильно"? Кто определяет эти правила? Дмитрий77А "велосипед" очень удобный. Я обычно делаю так. Exe-шник стандартно запущен под обычным пользователем. Если какое-то действо требует админа, то велосипедом запускаем себя самого (с Command -параметром) и возвращаем результат "админского исполнения" в неадминский текущий запуск. Если еще exe-шник подписан CodeSigning то это выглядит очень достойно. Бред сивой кобылы. Сам себе выдумываешь на пустом месте и с помощью какого-то хлама с кодплекса пытаешься бороться с ветряными мельницами. Есть штатный функционал, который управляется на манифестном уровне или с помощью UAC, на выбор. Всё остальное - удел школьников по постройке баррикад. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 19:29 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77С админским манифестом в нехороший довесок еще получаем нездоровый интерес со стороны антивирусов 1. В этом нет ничего плохого, антивирус должен иметь всегда повышенный интерес к любым исполняемым файлам и скриптам. 2. Если хватило ума поставить антивирус, сможешь управлять и исключениями. 3. На счет повышенного интереса, всё же, это сказки. Это равносильно тому, что в настройках ярлыка в "Дополнительно" указать галку "Запуск от имени администратора". Антивирус анализирует код. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 19:34 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77, вот, учи матчасть Create and Embed an Application Manifest (UAC) asInvokerThe application runs with the same access token as the parent process. Recommended for standard user applications. Do refractoring with internal elevation points, as per the guidance provided earlier in this document. highestAvailableThe application runs with the highest privileges the current user can obtain. Recommended for mixed-mode applications. Plan to refractor the application in a future release. requireAdministratorThe application runs only for administrators and requires that the application be launched with the full access token of an administrator. Recommended for administrator only applications. Internal elevation points are not needed. The application is already running elevated. 1. Такого у MS нигде нет, что requireAdministrator - плохо и не рекомендуется. 2. Если твоему коду нужны соответствующие гранты, значит нужен именно requireAdministrator. И выдумывать какие-то костыли внутри кода, да и с еще каким-то входными параметрами - это беспощадное зло, за которое нужно бить линейкой по рукам. 3. Есть штатные механизмы, которые поддерживаются на уровне операционных систем, следуем этим прописным правилам и получаем профиты. Велосипедам место на свалке. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 20:32 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУ, Я прекрасно и давно знаю что такое манифест и для чего он нужен. Умею их рисовать и вставлять в ресурсы. Я на VB6 писал, там в отличии от новомодных студий он "автоматом" не генерируется и надо делать ручками. >Такого у MS нигде нет, что requireAdministrator - плохо и не рекомендуется. Да но сам же привел цитату что рекомендуется. asInvokerRecommended for standard user applications. Я стараюсь писать именно standard user applications. Если из 100 ф-ций одна требует администратора, то именно методом запуска с повышением прав ее и разумно запускать, а не чтоб вся прога от админа. И даже если приложение надо запускать только от администратора, хотя бы из-за антивирусов я бы применил описанный прием (перезапуск самого себя) а не манифест. False Positive -это довольно большое зло, и очень тяжело объяснять это клиенту, а антивирусы сам знаешь как пишутся - хуже реальных вирусов. Давай не спорить про ерунду, тем более мы съехали с темы. А съехали потому что ты стал говорить про Process-> LaunchElevated вместо Process Privileges, что не одно и то же. Ну, а по теме кода со сменой владельца сказать наверно уже больше нечего. Оставил чистые API т.к. это лучше чем каша из .Net и API, а через чисто .Net не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 23:38 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77Да но сам же привел цитату что рекомендуется. asInvokerRecommended for standard user applications. Там 3 рекомендации, если ты заметил. Каждому кейсу свой параметр. Где ты там прочел, что "requireAdministrator - плохо и не рекомендуется"? Дмитрий77Я стараюсь писать именно standard user applications. Я не против. Дмитрий77Если из 100 ф-ций одна требует администратора, то именно методом запуска с повышением прав ее и разумно запускать, а не чтоб вся прога от админа. Если хоть 1 функция из 1 миллиарда требует администратора, то запуск должен быть именно requireAdministrator для всей песочницы. И никак иначе. Дмитрий77И даже если приложение надо запускать только от администратора, хотя бы из-за антивирусов я бы применил описанный прием (перезапуск самого себя) а не манифест. False Positive -это довольно большое зло, и очень тяжело объяснять это клиенту, а антивирусы сам знаешь как пишутся - хуже реальных вирусов. Да что ты заладил со своими антивирусами. Причем тут они? Если приложению требуются повышенные привилегии, для этого есть 3 параметра в манифесте. Всё. Не усложняй и не приплетай какие-то байки из склепа. Дмитрий77Давай не спорить про ерунду, тем более мы съехали с темы. А съехали потому что ты стал говорить про Process-> LaunchElevated вместо Process Privileges, что не одно и то же. Ну так ты умей внятно формулировать вопросы. Ты спросил: Дмитрий77Net.-объект Process насколько я понял Security не имеет Что под этим понимать? Я понял, что речь об этом 17065886 Какие ко мне вопросы? Дмитрий77Ну, а по теме кода со сменой владельца сказать наверно уже больше нечего. Оставил чистые API т.к. это лучше чем каша из .Net и API, а через чисто .Net не получится. По теме мне сказать нечего, увы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 14:26 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Перестал обращать внимания на посты Дмитрий77 (и всем советую), т.к. он не воспринимает рекомендации и критику. Даже не понимаю, зачем он темы создает. Наверное самоутвердиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 16:19 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
JeStoneДаже не понимаю, зачем он темы создает. Блог уже рекомендовали завести ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 16:33 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУНу так ты умей внятно формулировать вопросы. Ты спросил: Дмитрий77Net.-объект Process насколько я понял Security не имеет Что под этим понимать? Я понял, что речь об этом 17065886 Вообще-то я вполне однозначно указал о чем идет речь: Дмитрий77Но при этом без привелегий для процесса SE_TAKE_OWNERSHIP_NAME (назначить владельцем себя) и SE_RESTORE_NAME (назначить владельцем другого) работать не будет. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Net.-объект Process насколько я понял Security не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 16:47 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77МСУНу так ты умей внятно формулировать вопросы. Ты спросил: пропущено... Что под этим понимать? Я понял, что речь об этом 17065886 Вообще-то я вполне однозначно указал о чем идет речь: Дмитрий77Но при этом без привелегий для процесса SE_TAKE_OWNERSHIP_NAME (назначить владельцем себя) и SE_RESTORE_NAME (назначить владельцем другого) работать не будет. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Net.-объект Process насколько я понял Security не имеет. Я не понимаю тебя. Зачем ты выделил Process.GetCurrentProcess, hToken, SE_TAKE_OWNERSHIP_NAME и SE_RESTORE_NAME? Что я должен понять из этого, исходя из входного вопроса "Net.-объект Process насколько я понял Security не имеет" ? Более того, изначально эти куски кода не были выделены, а были выделены комментарии. К чему ты их выделил, мне тоже не понятно. Да и сам вопрос про "объект Process" задан в самом конце, хер пойми к чему он относится. В порыве твоего потока сознания это вполне мог бы быть просто отдельный вопрос. Если хочешь, чтобы тебя понимали, говори внятно и членораздельно. Если ты вбрасываешь кучу гавнокода вперемешку с потоком сознания, выводами и вопросами - это ни к чему хорошему не приведет. Я удивлен, что ты еще умудряешься ткнуть меня носом в свой поток больного воображения и недовольно промычать, мол всё же написано, читай внимательнее. Ты это, приземлись на землю что ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 17:00 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
МСУ, Все, проехали. Не надо ничего понимать. Извини что напряг. Гавнокодом называешь то что писано в MSDN? http://msdn.microsoft.com/en-us/library/windows/desktop/aa379620(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/aa446619(v=vs.85).aspx Скорее .Net классы каким-то гавнокодом не тем кодом писаны, раз полноценно не делают даже того что заявлено в .Net документации. http://msdn.microsoft.com/ru-ru/library/system.security.accesscontrol.objectsecurity.setowner(v=vs.110).aspx Признать это слабо? Проще на меня кучу грязи вылить? Все, хватит уже грызться. С Новым Годом! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 18:50 |
|
А как в .Net обстоят дела с правами на объекты (реестр, файл...), сменой владельца и т.п.?
|
|||
---|---|---|---|
#18+
Дмитрий77Гавнокодом называешь то что писано в MSDN? Гавнокодом называю то, что ты тут пишешь вместо явного использования манифеста. Дмитрий77Скорее .Net классы каким-то гавнокодом не тем кодом писаны, раз полноценно не делают даже того что заявлено в .Net документации. Не нравится, сиди колупай свой убогий vb 6.0. Мне за 10 лет кодирования ни разу не понадобилось заниматься той херней, которой занимаешься ты. Можешь дальше сидеть на пустом месте и бороться с ветряными мельницами. Дмитрий77Признать это слабо? Проще на меня кучу грязи вылить? Я не могу признать, т.к. детально не разбирался в твоем вопросе. Возможно где-то что-то упусщено. Дмитрий77Все, хватит уже грызться. С Новым Годом! Спасибо, взаимно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 19:18 |
|
|
start [/forum/topic.php?fid=20&msg=38845951&tid=1402058]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 140ms |
0 / 0 |