dwNewACLSize = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) +
GetLengthSid(UserSID) - sizeof(DWORD) ;
//создать и проинициализировать новый ACL
InitializeAcl( pNewFileDACL, dwNewACLSize, ACL_REVISION2 );
//поместить новый ACE с разрешением на чтение файла для пользователя в конец DACL
AddAccessAllowedAce( pNewFileDACL, ACL_REVISION2, GENERIC_READ, &UserSID
);
// записать DACL в новый SD файла
SetSecurityDescriptorDacl( pNewFileSD, TRUE, pNewFileDACL, FALSE );
// установить новый SD для файла с именем в filename
SetFileSecurity( filename, DACL_SECURITY_INFORMATION, pNewFileSD );
Разграничение прав доступа пользователей к файлам и папкам
в Win32 возможно только при использовании файловой системы
NTFS. Эта файловая система обеспечивает поддержку
дескрипторов безопасности для элементов файловой системы и
позволяет определять следующие права на доступ: чтение, запись,
выполнение, удаление, изменение прав доступа, получение права
владельца, запись/чтение атрибутов (см. рис. 6.2). Необходимо,
однако, отметить, что файловая система NTFS не выполняет
шифрования информации на носителях, в связи с чем существует
возможность получить доступ к информации на физическом
уровне, например, загрузившись с другой операционной системы,
получить доступ к информации в файлах. Такую возможность
предоставляет утилита ntfsdos.exe, которую можно запустить,
предварительно загрузив на компьютер операционную систему MS
DOS c гибкого диска. Для того чтобы предотвратить доступ к
логическим NTFS – дискам необходимо запретить загрузку
компьютера с гибкого диска, запретить подключение других
носителей к компьютеру и отключение носителя от компьютера.
Альтернативой этому комплексу мер может стать использование
файловой системы EFS (Encrypting File System). Шифрующая
106