Добавление IIS_IUSRS с разрешением на запись в каталог программным способом

Я использую Delphi 10.2 Tokyo, и я хотел бы добавить права записи для пользователя IIS_IUSRS в определенный каталог.

Есть ли в Delphi какие-либо встроенные функции, которые я могу использовать для этого?

Если нет, то какие функции Win32 API я должен использовать?


person zeus    schedule 05.07.2018    source источник
comment
Для этого в Delphi нет ничего встроенного. Вы можете использовать SetNamedSecurityInfo() для обновления дескриптора безопасности каталога с желаемыми разрешениями пользователя.   -  person Remy Lebeau    schedule 06.07.2018


Ответы (1)


Выполнение этого программным способом затруднительно из-за сложности API-интерфейсов безопасности Windows, но есть более простой способ - выполнить оболочку icacls, и вместо этого он сделает всю тяжелую работу.

Я не знаю, как заставить Delphi запускать программу из командной строки, но я полагаю, что вы можете справиться с этим битом, поэтому подходящая командная строка, вероятно, будет примерно такой:

icacls MyFolder /grant "IIS_IUSRS:(OI)(CI)F"

Это дает «полный доступ» MyFolder и всем, кто плывет в ней, и вы можете точно проверить, какой эффект действительно имела эта (или какая-либо другая) команда, на вкладке «Безопасность» в окне «Свойства» для данной папки в проводнике.

Возможны и другие, более мелкие разрешения, здесь есть полезный пост:

Как предоставить разрешение пользователям для каталога с помощью командной строки в Windows?

Счастливого тидлинга ACL.

person Paul Sanders    schedule 06.07.2018
comment
спасибо Сандерс, я также думаю, что icalcs (icacls c: \ toto / grant IIS_IUSRS: (OI) (CI) f / t / q, например) является более простым способом. Легко, что у них нет эквивалентного API или функции made (простой, как использование icacls), которая могла бы это сделать. - person zeus; 06.07.2018
comment
Да, более простой API «для остальных из нас» был бы очень кстати. - person Paul Sanders; 06.07.2018
comment
Хммм, прокомментируйте мой собственный комментарий: заходите в Microsoft, дайте нам icacls синтаксис командной строки в качестве API. - person Paul Sanders; 06.07.2018
comment
В Powershell это сработало, только если я включил кавычки после / grant - person Ciaran Gallagher; 01.05.2019
comment
Хорошо спасибо. Наверное, из-за скобок. Я обновлю свой ответ. - person Paul Sanders; 01.05.2019