Не могу получить SACL ключа реестра
От: S_Alex74  
Дата: 16.02.02 13:03
Оценка:
Доступ к ключу есть (Full Control), SE_SECURITY_NAME получаю, а RegGetKeySecurity(... SACL_SECURITY_INFORMATION ...) возвращает "Access denied". Причем для HKCU все работает, а для подключей HKCU нет.
Re: Не могу получить SACL ключа реестра
От: Alex Fedotov США  
Дата: 16.02.02 18:35
Оценка:
Здравствуйте S_Alex74, Вы писали:

SA>Доступ к ключу есть (Full Control), SE_SECURITY_NAME получаю, а RegGetKeySecurity(... SACL_SECURITY_INFORMATION ...) возвращает "Access denied". Причем для HKCU все работает, а для подключей HKCU нет.


На исходный код можно взглянуть?
-- Alex Fedotov
Re[2]: Не могу получить SACL ключа реестра
От: S_Alex74  
Дата: 16.02.02 19:15
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>На исходный код можно взглянуть?


...
CRegKey rk;
if( !rk.SetPrivilege(SE_SECURITY_NAME) ) {
  ShowError( rk.GetLastErrorText() );
  return 1;
}

//if( rk.Open(NULL, _T("HKEY_CURRENT_USER")) ) {
//if( rk.Open(NULL, _T("HKEY_CURRENT_USER\\Software")) ) {
if( rk.Open(NULL, _T("HKEY_CURRENT_USER\\Software\\BBB")) ) {
  SECURITY_DESCRIPTOR* psr = rk.GetSecurity( SACL_SECURITY_INFORMATION );
...
}
...

SECURITY_DESCRIPTOR* const CRegKey::GetSecurity(const SECURITY_INFORMATION _SecInfo)
{
  DWORD dwSize = m_dwBufSize[0] * sizeof(WCHAR);
  m_lLastError = ::RegGetKeySecurity( m_hKey, _SecInfo, m_sBuffer[0], &dwSize );
  if( m_lLastError == ERROR_INSUFFICIENT_BUFFER ) {
    if( !SetBufferSize((dwSize+1)/sizeof(WCHAR)) ) return NULL;
    m_lLastError = ::RegGetKeySecurity( m_hKey, _SecInfo, m_sBuffer[0], &dwSize );
  }
  if( m_lLastError == ERROR_SUCCESS ) {
    return reinterpret_cast<SECURITY_DESCRIPTOR*>(m_sBuffer[0]);
  }
  return NULL;
}

Класс мой (в смысле, не MFC). Ключ в данном случае открывается с KEY_ALL_ACCESS.
Re[3]: Не могу получить SACL ключа реестра
От: Alex Fedotov США  
Дата: 16.02.02 19:27
Оценка: 1 (1)
Здравствуйте S_Alex74, Вы писали:

AF>>На исходный код можно взглянуть?


SA>Класс мой (в смысле, не MFC). Ключ в данном случае открывается с KEY_ALL_ACCESS.


Понятно. Маска KEY_ALL_ACCESS не включает в себя ACCESS_SYSTEM_SECURITY, которое необходимо указать для получения SACL. То есть надо использовать KEY_ALL_ACCESS|ACCESS_SYSTEM_SECURITY, или, что лучше, более специфичный набор прав доступа, (например, KEY_READ|ACCESS_SYSTEM_SECURITY и т.д.).
-- Alex Fedotov
Re[4]: Не могу получить SACL ключа реестра
От: S_Alex74  
Дата: 16.02.02 19:40
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Понятно. Маска KEY_ALL_ACCESS не включает в себя ACCESS_SYSTEM_SECURITY, которое необходимо указать для получения SACL. То есть надо использовать KEY_ALL_ACCESS|ACCESS_SYSTEM_SECURITY, или, что лучше, более специфичный набор прав доступа, (например, KEY_READ|ACCESS_SYSTEM_SECURITY и т.д.).


Спасибо! Теперь понятно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.