![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Приветствую! Как можно получить доступ к секретным разделам реестра? К примеру:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EMDMgmt На просторах инета вычитал что к подобным разделам есть доступ только у системы, но сделать это можно через LsaOpenPolicy/LsaRetrievePrivateData/LsaStorePrivateData, но про то как это сделать я ничего толкового не нашел. Может кто сталкивался с чем-то подобным? Или есть другой способ? |
#2
|
|||
|
|||
![]() Regedit открывает. Соответсвенно, и любая программа может открыть.
Единсивенное что, возможно, придется работать с функциями API, т.к. потребуется собрать дескриптор безопасности для доступа к этой ветке. |
#3
|
||||
|
||||
![]() Я так понимаю это в Семёрке. Ну или в Висте. В ХР нет же? Или есть что-то, чего RegEdit не показывает?
|
#4
|
|||
|
|||
![]() Цитата:
Да, речь о Семерке. Проблема в том что смысла от Regestry.OpenKeyReadOnly нет, т.е. таким методом ключ не создать. Покопавшись в нете, я пришел к выводу, что для доступа к этому разделу (он такой далеко не единственный) нужны права системы (т.е. доступ есть только у системы), и получить (обойти) их как-то можно через функции LSA что в API. Возможно сразу не совсем понятно написал, но доступа нет программно, через regedit все это делается. |
#5
|
|||
|
|||
![]() Цитата:
Собственно вопрос как это сделать? К сожалению не обладаю достаточными знаниями ![]() |
#6
|
||||
|
||||
![]() У меня регэдит не нашел эту ветку. Win7 x64.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
![]() А с правами админа запускать программу пробовали?
У меня 8ка, ключ такой есть и regedit его спокойно открывает. Программно не проверял, ибо лень. |
#8
|
|||
|
|||
![]() Цитата:
Да с regedit все ок, а во программно ... . С админом запускал, и через manifest и через контекстное. |
#9
|
||||
|
||||
![]() А вот это не о том?
Код:
procedure SetRegKeySecurity(KeyRoot : HKEY; KeyName : String); var Privs : IJwPrivilegeScope; Key : HKEY; KeySec : TJwSecureRegistryKey; DACL : TJwDAccessControlList; begin JwInitWellKnownSIDs; //inits JwSecurityProcessUserSID if RegOpenKeyEx(KeyRoot, PChar(KeyName), 0, KEY_ALL_ACCESS, Key) = ERROR_ACCESS_DENIED then begin Privs := JwGetPrivilegeScope([SE_TAKE_OWNERSHIP_NAME], pst_Enable); if RegOpenKeyEx(KeyRoot, PChar(KeyName), 0, WRITE_OWNER, Key) <> 0 then RaiseLastOSError; try TJwSecureRegistryKey.TakeOwnerShip(Key); if RegOpenKeyEx(KeyRoot, PChar(KeyName), 0, WRITE_DAC, Key) <> 0 then RaiseLastOSError; KeySec := TJwSecureRegistryKey.Create(Key); try DACL := KeySec.DACL; //returns a cached DACL so we must not free it! DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afContainerInheritAce], KEY_ALL_ACCESS, JwSecurityProcessUserSID)); KeySec.SetDACL(DACL); finally KeySec.Free; end; finally RegCloseKey(Key) end; end; end; |