|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Установка прав доступа к объекту в реестре
Столкнулся с такой задачей: В реестре имеется ключ, который нужно удалить. Права доступа следующие: система - read, Администраторы - read, Пользователи - read, TrustedInstaller - Full. Как я понимаю нужно стать владельцем объекта, затем установить для своего пользователя права на запись и лишь после этого удалить нужный объект. Однако столкнулся с тем что при попытке выполнения следующего кода получаю сообщение об ошибке.
Код:
function ChangeRegKeySecurity(AUser, ADomain: String; AKey: HKEY; APatch: String; AHideMessage: Boolean = True): Boolean; var Key: HKEY; test: integer; pOwnerSid: PSid; lpDomain: PWideChar; cbDomain, cbSid: Cardinal; peUse: Cardinal; pSecDescr: PSECURITY_DESCRIPTOR; r: integer; mybuff: PWideChar; begin Result := False; pSecDescr := PSECURITY_DESCRIPTOR (LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH)); LookupAccountName(PChar(ADomain), PChar(AUser), nil, cbSid, nil, cbDomain, peUse); GetMem(pOwnerSid, cbSid); GetMem(lpDomain, cbDomain * SizeOf(WideChar)); if not LookupAccountNameW(PChar(ADomain), PChar(AUser), pOwnerSid, cbSid, lpDomain, cbDomain, peUse) then begin if not AHideMessage then MessageDlg('Указанный пользователь не найден!', mtError, [mbOK], 0); Exit; end; if InitializeSecurityDescriptor(@pSecDescr, SECURITY_DESCRIPTOR_REVISION) then begin if SetSecurityDescriptorOwner(@pSecDescr, pOwnerSid, True) then begin //Вот тут получаем ошибку об Access Denied r := RegOpenKeyEx(AKey, PWideChar(APatch), 1, KEY_ALL_ACCESS, Key); if r = ERROR_SUCCESS then begin r := RegSetKeySecurity(Key, OWNER_SECURITY_INFORMATION, @pSecDescr); if r <> ERROR_SUCCESS then begin if not AHideMessage then MessageDlg(SysErrorMessage(r), mtError, [mbOK], 0); Exit; end; RegCloseKey(Key); Result := True; end else begin if not AHideMessage then MessageDlg(SysErrorMessage(r), mtError, [mbOK], 0); Exit; end; end; end else begin if not AHideMessage then MessageDlg('Не могу инициализировать дескриптор безопасности!', mtError, [mbOK], 0); end; end; ..... ChangeRegKeySecurity('TestUser','TEST-PC',HKEY_CLASSES_ROOT,'AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}',False); TestUser - является администратором. Собственно вопрос с каким ключем прав доступа выполнить RegOpenKeyEx. Последний раз редактировалось Asmoday74, 29.10.2011 в 23:48. |