Win32 API CreateFile для открытия файла с пустым DACL (дескриптор безопасности) - PullRequest
0 голосов
/ 08 августа 2011

Я использую CreateFile, чтобы получить дескриптор файла, чтобы добавить ACE к его DACL. Проблема в том, что когда файл не имеет разрешений, я получаю сообщение об ошибке «Отказано в доступе», когда вызываю функцию CreateFile, я ВЛАДЕЛЕЦ файла и Admin. Если я использую проводник, я могу добавить разрешения.

Меня не интересуют другие функции, такие как OpenFile или установка дескриптора безопасности напрямую, меня интересует правильная комбинация для открытия таких файлов.

Я прочитал в MSDN, что я должен использовать определенное право доступа, я попробовал:

CreateFile (lpFileName, READ_CONTROL | WRITE_DAC, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS);

CreateFile (lpFileName, READ_CONTROL | WRITE_DAC, 0, NULL, OPEN_EXISTING, ACCESS_SYSTEM_SEURITY);

Оба я получаю отказано в доступе. Есть идеи?

Спасибо, Gabi

1 Ответ

0 голосов
/ 10 августа 2011

Это должно работать, поскольку владельцу всегда неявно предоставляются права READ_CONTROL и WRITE_DAC, но я проверял такое же поведение на моей машине.Из любопытства я запустил Process Monitor и нашел кое-что странное.Когда Explorer открывает файл для чтения информации о безопасности, он проходит через NtOpenFile (READ_CONTROL).Когда моя тестовая программа, которая вызывает CreateFile (), открывает файл, она проходит через NtCreateFile (READ_CONTROL | SYNCHRONIZE ).Очевидно, что это потерпит неудачу, так как нет ACE, предоставляющих мне доступ SYNCHRONIZE.Я понятия не имею, откуда взялся этот дополнительный флаг доступа.Единственное, о чем я могу подумать, может быть, это как-то связано с WOW64 (это 32-разрядная тестовая программа, работающая от имени администратора на 64-разрядной машине), но у меня не было достаточной мотивации, чтобы исследовать ее дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...