Re[3]: Смена прав на ключ реестра
От: Диоксин Украина  
Дата: 24.06.11 10:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Диоксин, Вы писали:


Д>>используем функцию RegGetKeySecurity для получения security descriptor для нужного ключа. Почле этого меняем список dacl. Для упрощения можно использовать класс CSecurityDesc из ATL. А потом вызываем метод RegSetKeySecurity


А>Да использую... только видимо не так...



А>
А>long ll = reg.Open(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\MyService"), KEY_QUERY_VALUE); // возвращается 0
А>CSecurityDescriptor sd;
А>sd.InitializeFromThreadToken();
А>SetLastError(0);
А>ll = reg.SetKeySecurity(DACL_SECURITY_INFORMATION, sd); // тоже 0
А>reg.Close();
А>


А>но реально ничего не меняется, смотрю права на ветку через regedit


Вы ведь ничего и не меняете:

CSecurityDesc sd;
CDacl dacl;
bool bDefaulted = false;
bool bGetDACL = sd.GetDacl(&dacl,NULL,&bDefaulted);
if(bGetDACL)
{
   UINT cAces = dacl.GetAceCount();
   for(UINT i = 0;i < cAces;++i)
   {
     CSid s;
     BYTE nAceType;
     dacl.GetAclEntry(i,&s,NULL,&nAceType,NULL,NULL);
     if(s == Sids::Admins() && ACCESS_DENIED_ACE_TYPE == nAceType)
     {
       dacl.RemoveAce(i);
       break;
     }
   }
}

sd.SetDacl(dacl,bDefaulted);
sd.MakeSelfRelative();
reg.SetKeySecurity(DACL_SECURITY_INFORMATION, sd.GetPSECURITY_DESCRIPTOR())
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.