Как получить доступ к дополнительным разрашениям NTFS. Доступ к основным шести разрешениям можно пулучить с помощью API функций (GetNamedSecurityInfo() например), которые возвращают Security Descriptor для файла, содержащий в свою очередь DACL. В DACL основные разрешения, а где хранятся дополнительные? Подскажите, пожалуйста.
[C++] В DACL хранятся ВСЕ разрешения для объекта20.06.05 12:16 Автор: amirul <Serge> Статус: The Elderman
> содержащий в свою очередь DACL. В DACL основные разрешения, > а где хранятся дополнительные? Подскажите, пожалуйста. Но объект может унаследовать ACL от родителя.
Не тестировал, но что то мне подсказывает, что такие унаследованные ACE будут иметь флаг INHERITED_ACE
[C++] У Лены какие-то стуки подземные... Может она вообще, SACL имеет ввиду? ;-)20.06.05 13:09 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 20.06.05 13:11 Количество правок: 1
Короче... Есть такой объект ядра в системе, называется Файл.
Он имеет методы для работы с ним... Они экспортируются соотв. файловым API Windows.
В DACL хранятся параметры самого DACL'a, и список ACL'ов. В каждом ACL'е два интересующих нас поля: SID и ACCESS_MASK. Дык вот, маска доступа по сути своей фильтр, который не "пропускает" некоторые методы работы с файлами для клиента, который хочет работать с защищённым объектом (файлом).
Кстати, GetNamedSecurityInfo (у вас) какой-то неуклюжий, для файлов есть специальный вариант -- GetFileSecurity. К тому же, для её работы не надо иметь дескриптор файла, имени достаточно...
---
Эта маска состоит из Generic, Standard, и наконец, SpecificRights. Генерики позволяют ленивому программеру при открытии файла просто указать доступ вроде GENERIC_READ, и система, пропустив эту константу через специальную структуру GENERIC_MAPPING, приведёт это всё у виду Specific, и успешно отработает.
Расклад Specific Rights для объекта типа "файл" там же -- в winnt.h
//
// Define access rights to files and directories
//
//
// The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
// devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
// constantsMUSTalways be in sync.
// The values are redefined in devioctl.h because they must be available to
// both DOS and NT.
//
#define FILE_READ_DATA ( 0x0001 ) // file & pipe
#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory
#define FILE_WRITE_DATA ( 0x0002 ) // file & pipe
#define FILE_ADD_FILE ( 0x0002 ) // directory
#define FILE_APPEND_DATA ( 0x0004 ) // file
#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) // directory
#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) // named pipe
#define FILE_READ_EA ( 0x0008 ) // file & directory
#define FILE_WRITE_EA ( 0x0010 ) // file & directory
#define FILE_EXECUTE ( 0x0020 ) // file
#define FILE_TRAVERSE ( 0x0020 ) // directory
#define FILE_DELETE_CHILD ( 0x0040 ) // directory
#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all
#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) // all
#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
FILE_READ_DATA |\
FILE_READ_ATTRIBUTES |\
FILE_READ_EA |\
SYNCHRONIZE)
#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
FILE_WRITE_DATA |\
FILE_WRITE_ATTRIBUTES |\
FILE_WRITE_EA |\
FILE_APPEND_DATA |\
SYNCHRONIZE)
#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
FILE_READ_ATTRIBUTES |\
FILE_EXECUTE |\
SYNCHRONIZE)
---
[C++] Если я правильно понял, то имеются в виду права которые нарисованы во вкладке безопасность20.06.05 14:19 Автор: amirul <Serge> Статус: The Elderman
Там как раз 6 стандартных прав (магическое число, указанное в корневом посте) и галка для specific rights которая включается, если есть хоть одно из них
А вообще, надо предложить выкладывать фотографию своего компьютера и/или программы - будем лечить.