Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Изменение настроек безопасности реестра


Автор: Delvish 30.11.2012, 12:21
пробовал компоненты JEDI (jwscl) - но их отчего-то клинит - если пользователя нет в списке, он добавляется с правами "разрешить". если потом дать права "запретить" - изменяется. а обратно с "запретить" на "разрешить" - ни в какую.
пробовал компоненты NtSet - Отказ в доступе.
пробовал по способу Cheba http://forum.vingrad.ru/forum/topic-18464/unread-1/hl/setnamedsecurityinfo/index.html# - тоже не хочет работать.

просьба: помогите дельным советом/кодом для изменения DACL. замучался уже  smile очень уж надобно мне пару веток реестра умееть наделять правами и запрещать доступ.

Автор: kami 30.11.2012, 12:25
Цитата(Delvish @  30.11.2012,  12:21 Найти цитируемый пост)
если потом дать права "запретить" - изменяется. а обратно с "запретить" на "разрешить" - ни в какую.

Возможно, глупый вопрос - разрешить/запретить выставляется для текущего пользователя?

Автор: Delvish 30.11.2012, 12:34
а уже по-всякому пробовал - и для текущего, и для группы "Все", и для "Пользователи". единственные подвижки только с JEDI-компонентами - они как-то хитро умеют преодолевать безопасность (по крайней мере, для тестовой ветки HKEY_CURRENT_USER\123) и добавлять пользователя в ACL, а так же, как я уже выше упомянул, изменять Allow на Deny, но не обратно. все остальные способы во всяких интерпритациях ругались на отказ в доступе и т.п.
P.S. привилегию SeTakeOwnershipPrivilege на всякий случай получал

Автор: kami 30.11.2012, 15:10
На счет "пользователи" не скажу (хз, где они там в иерархии), а вот "для текущего" и "для всех" действительно можно будет только запретить, т.к. что ж это будет за безопасность, если пользователь, которому запрещено что-то, сможет сам себе разрешить это "что-то".

Автор: Delvish 30.11.2012, 16:49
ну по логике я с админскими правами могу управлять учетками пользователей и групп, находящихся по иерархии ниже меня. и ведь если, к примеру, Гость отсутствует в списке доступа, а я его добавляю с правами Allow на все - он же добавляется. только вот с Deny на Allow не желает возвращаться. я попробовал было удалять пользователя всякий раз как вношу изменения - но у меня ошибку выдает, так и не понял чего оно от меня хочет. это относительно JEDI.
еще вот кусок кода замучал - у меня получается изменять только вид доступа "Особые разрешения". что запрет, что одобрение - только на этот пункт идет. для любого пользователя и любой группы. тоже не могу понять отчего так. может, кто что дельное подскажет?

Код

  pEA := AllocMem(SizeOf(EXPLICIT_ACCESS_A));
  BuildExplicitAccessWithName(pEA, 'Все', GENERIC_ALL, GRANT_ACCESS, NO_INHERITANCE);
if SetEntriesInAcl(1, pEA, nil, pDACL) <> ERROR_SUCCESS then
  ShowMessage(SysErrorMessage(GetLasterror)) else
  begin
    if SetNamedSecurityInfo('CURRENT_USER\123', SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
       nil, nil, pDACL, nil) <> ERROR_SUCCESS then
           ShowMessage('SetNamedSecurityInfo failed: ' + SysErrorMessage(GetLastError));
    LocalFree(Cardinal(pDACL));
  end;

Автор: Delvish 2.12.2012, 13:15
в идеале, кстати сказать, мне нужно редактировать ветки HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB и HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR. по умолчанию доступ туда закрыт и админам, но я же могу ручками добавить себя в список разрешенных. вот и программно должен же быть какой-то способ. неужели никто не сталкивался?.. :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)