Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, egoroff, Вы писали:
[]
Это все прекрасно, но человеку нужно настроить
безопасность, а это значения LaunchPermission и AccessPermission.
Они представляют собой обыкновенные sd (security descriptors) в относительном формате. Работать с этим форматом можно с помощью функций MakeSelfRelativeSD и MakeAbsoluteSD.
Когда-то давно я писал тулзу по настройке всего этого хозяйства, но так и не дописал. Однако кое-что получилось:
void DumpKey(PCTSTR key_name)
{
CRegKey key;
if (key.Open(HKEY_CLASSES_ROOT,key_name) == ERROR_SUCCESS){
DWORD type_key = REG_BINARY;
PBYTE pbuf = (PBYTE)_alloca(1000);
DWORD len = 1000;
if (RegQueryValueEx(key,_T("AccessPermission"),0,
&type_key,pbuf,&len) == ERROR_SUCCESS){
if (type_key == REG_BINARY){
security::CPrivateSD sd;
sd.LoadFromSelfRelative(pbuf);
cout << sd;
}
}
}
}
...
DumpKey(_T("AppID\\{ххх}"));
Могу объяснить поподробнее работу классов. Может (если покапаюсь серьезно) собрать классы воедино и выложить в инет.