Как сделать так, чтобы администратор установил параметр программы, который пользователь не может изменить?

StackOverflow https://stackoverflow.com/questions/1015542

  •  06-07-2019
  •  | 
  •  

Вопрос

Моему приложению необходимо прочитать параметр при запуске, чтобы проверить, должно ли оно запускаться в режиме только для чтения.Пользователь не должен разрешать изменять этот параметр.

Обычно я делаю это сейчас, используя значение, установленное в разделе HKLM\Software системного реестра.Администратор устанавливает значение, и пользователи не могут его изменить (у них нет прав на изменение записей в HKLM).

Проблема в том, что на компьютере с сервером терминалов (или Citrix) это затрагивает всех пользователей.Я хотел бы найти способ сделать это для каждого пользователя.Как другие справляются с этим?Есть ли в системном реестре раздел для такого рода настроек для каждого пользователя, которые пользователь не может изменить?

Спасибо за любые предложения или комментарии!

Это было полезно?

Решение

По сути, это то, для чего предназначен ключ HKEY_CURRENT_USER \ Software \ Policies , то есть ключ в пользовательской части реестра, который по умолчанию доступен только для чтения самому пользователю.

По соглашению иерархия ключей должна дополнять ту, которая у вас уже есть в разделе HKEY_CURRENT_USER \ Software , например если ваши обычные пользовательские настройки хранятся в HKEY_CURRENT_USER \ Software \ MyCompany \ MyProgram , то защищенные пользовательские настройки (или " policy " в MS-lingo) должны храниться в HKEY_CURRENT_USER \ Software \ Policies \ MyCompany \ MyProgram

Обратите внимание, что рекомендуется устанавливать значения для этого ключа только через объекты групповой политики, а не через прямой доступ к реестру.

Другие советы

Концепция области пользовательских настроек, которую пользователь не может изменить, на самом деле не имеет смысла - если это пользовательские настройки, "вы" (пользователь) ожидаете, что сможете их изменить.

Я могу придумать две альтернативы:

  • Запишите свои настройки в HKLM, но используйте разные настройки для каждого пользователя и глобальную резервную настройку для пользователей, у которых настройка не установлена
  • Запишите их в HKCU, но используйте API безопасности реестра, чтобы предотвратить их запись в него.Вероятно, вам понадобятся разрешения, превышающие их собственные, чтобы предотвратить отмену изменений в разрешении .Мне не очень нравится этот вариант но если вы хотите следовать ему вы, вероятно, захотите начать с Безопасность RegGetKeySecurity и RegSetKeySecurity АПИс. Эта статья это тоже может быть интересно .

Лично я думаю, что первый вариант был бы самым простым, а также включал бы менее хитроумные элементы в дерево реестра пользователя.Надеюсь, это поможет!

Как насчет двух настроек?

1) Установите флаг в HKLM, указав, что только чтение только является поведением по умолчанию на этом компьютере.

2) Для всех пользователей, которым необходим полный доступ, установите токен в HKCU, который разрешает полный доступ.

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

Почему вы не храните опции в своей собственной базе данных? Это кажется разумным и достаточно удобным (по крайней мере, мне 8)) Никаких проблем с созданием " портативного " версия вашего продукта. Ни один пользователь не беспокоится о каких-либо настройках, которые вам не нужны.

Что не так с HKCU вместо HKLM? Это будет для каждого пользователя. К сожалению, он может быть изменен пользователем, если пользователь знает, как редактировать реестр и найти ключ.

  • Возьмите один из файлов, прилагаемых к вашей программе, который не должен быть изменен (по крайней мере, пользователем с ограниченными правами).Если такого файла нет, создайте его специально для этой цели.
  • Позвольте администратору установить права только на чтение этого файла для этих ограниченных пользователей.
  • В программе проверьте, есть ли у вас доступ на запись к этому файлу.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top