Re[2]: Добавление аудита к файлам в Win2K
От: DelpH  
Дата: 09.12.02 15:50
Оценка:
Сид теперь вроде получается нормально, но при открытии свойств появляется сообщение, что весь ACL настроен неправильно и лучше его resetнуть. В чем ошибка? Делаю так:

// получаем сид (собств. функция)
GetAccountSid(NULL, "delph", &user);
// Подсчет необх. размера — это правильно ?
aclSize = aclSizeInfo.AclBytesInUse + sizeof(ACL) +
sizeof (SYSTEM_AUDIT_ACE) + GetLengthSid(user) — sizeof (DWORD);
newACL = (PACL) new BYTE [aclSize];
if (!InitializeAcl (newACL, aclSize, ACL_REVISION))
{ MessageBox(NULL, "Error4!", "Error", MB_OK); }
if(CopyACL(pacl, newACL) != ERROR_SUCCESS)
{ MessageBox(NULL, "Error5!", "Error", MB_OK); }
if(!AddAuditAccessAce(newACL, ACL_REVISION, GENERIC_WRITE, user, TRUE, FALSE))
{ DWORD er = GetLastError(); DisplayError(er); }


Получаю ACL так: разрешаю привилению SE_SECURITY_NAME, потом получаю дескриптор безопасности ф-ей GetFileSecurity и функцией GetSecurityDescriptorDacl получаю АЦЛ лист (вроде) так:
GetFileSecurity(DFILE, si, psd, dwSize, &dwSize);
где si = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION;


Устанавливаю обратно ACL так: инициализирую деск. безопасности ф-ей InitializeSecurityDescriptor и далее так:
if(SetNamedSecurityInfo(DFILE, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, newACL, NULL) != ERROR_SUCCESS)
{ MessageBox(NULL, "SetNamedSecurityInfo Error!", "Error", MB_OK); }


CopyAcl представляет из себя следующее:
DWORD CopyACL(PACL OldACL, PACL NewACL)
{
ACL_SIZE_INFORMATION aclSizeInfo;
LPVOID ace;
ACE_HEADER *aceHeader;
ULONG i;
GetAclInformation (OldACL, (LPVOID) &aclSizeInfo, (DWORD) sizeof (aclSizeInfo), AclSizeInformation);
for (i = 0; i < aclSizeInfo.AceCount; i++)
{

if (!GetAce (OldACL, i, &ace))
return GetLastError();
aceHeader = (ACE_HEADER *) ace;
if (!AddAce (NewACL, ACL_REVISION, 0xffffffff, ace, aceHeader->AceSize))
return GetLastError();
}
return ERROR_SUCCESS;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.