Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 002

/ вопрос решён /

Здравствуйте!
Моя программа создает свой раздел в реестре и заносит туда свои данные. Как программно сделать так чтоб пользователь, зашедший под учетной записью "гость" не мог изменить и удалить этот раздел?

Пупкин В.В. Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Пупкин В.В. (статус: 1-ый класс)
Вопрос отправлен: 16 октября 2008, 10:56
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Пупкин В.В.!
Никаких проблем нет. Главное правильно выбрать ветвь реестра.
HKCR, HKLM - сюда лучше ничего не писать, это для системы
HKCU - это настройки для текущего пользователя. Эта ветка подставляется отдельно для каждого пользователя.Естественно, что он обычно имеет полный доступ к этой ветке. (и Гость тоже, но к данным другого пользователя доступ не получит).
HCU - пользовательские настройки. Продвинутые пользователи и администраторы имеют полный доступ, а гости по умолчанию только чтение.
Название ветвей я сократил, это достаточно употребимые сокращения. Если открыть редактор реестра, то можно быстропонять, кто где.
Также следует не забывать, что по умолчанию класс TRegistry пытается получить доступ полный. По этому, когда открываем ветвь, то там есть параметр ReadOnly (вроде так) - надо выставить его в True.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 16 октября 2008, 11:14
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Пупкин В.В.!
Дополню Вадима.
TRegistry всегда открывает реестр с параметром KEY_ALL_ACCESS (полный доступ), даже если необходим доступ KEY_READ (только чтение). Избежать этого можно используя TRegistry.OpenKeyReadOnly вместо TRegistry.OpenKey .
В справке про TRegistry указано неверно, что ключ открывается всегда с параметром KEY_ALL_ACCESS. В случае если открывать через TRegistry.OpenKeyReadOnly он откроется с параметром KEY_READ .
А вот тут есть пример по раздаче прав на реестр.

P.S. Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 20 октября 2008, 14:06
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо за пример! (не мог найти даж приблизительное правильное направление поисков)

Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 16 октября 2008, 15:34; участников в обсуждении: 2.
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 16 октября 2008, 11:50 [#1]:

Спасибо, даж не подумал об том что по умолчанию разный доступ к разным разделам =)
Если я правильно понял нужно писать в раздел HKEY_USERS?
А можно как то менять права на доступ к определенной ветке или разделу реестра? (это основная суть вопроса) т.к. если я програмно изменю права то однозначно не будет доступа, а так понадеятся только на то что какой то добрый админ ничего не менял и все по умолчанию, вероятность конечно этого очень велика но всеж...
Просто програмные продукты например Adobe это как то делают.
Вадим К

Вадим К (статус: Академик), 16 октября 2008, 11:53 [#2]:

Ручками поменять - проще простого. Поменять программно тоже можно, но так сходу кода не напишу. Да там и не две строки.
Галочка "подтверждения прочтения" - вселенское зло.
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 16 октября 2008, 12:09 [#3]:

Мне не срочно, пока можно обойтись размещением в разделе где нет доступа гостю. Но вопрос для меня очень интересный и хотелось бы разобраться. Если не затруднит напишите програмную реализацию или хоть укажите направление где можно об этом почитать.
Вадим К

Вадим К (статус: Академик), 16 октября 2008, 12:16 [#4]:

идём в www.msdn.com. Там точно всё есть. искать начинать надо с слов ACL (вроде расшифровывается Access Control List) ну и Registry.
Галочка "подтверждения прочтения" - вселенское зло.
Пупкин В.В.

Пупкин В.В. (статус: 1-ый класс), 16 октября 2008, 15:34 [#5]:

к сожалению ничего не могу найти в msdn =( есть только класс под .NET

31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 12 декабря 2017, 21:11
Выполнено за 0.46 сек.
Рейтинг@Mail.ru