如何赋予'Everybody'文件的完整权限(以编程方式)

egr*_*nin 6 c++ file-permissions windows-vista

我正在修改旧的C++程序以在Vista上运行.它不需要管理员权限.

我已经更改了将日志文件放入的代码\ProgramData\MyApp\.这些日志文件是书面的stdio功能(fopen,fprintf,fclose).

这是问题所在:

  1. UserA首先运行程序,它\ProgramData\MyApp\MyLogFile.txt使用创建CreateFile()

  2. UserB接下来运行该程序,它尝试追加MyLogFile.txt并获得拒绝访问权限.

我尝试创建一个null SECURITY_DESCRIPTOR并将其传递给CreateFile().这确实创建了一个"没有分配权限"的文件,但似乎第一个写入该文件的用户获得了所有权,之后所有其他非管理员用户都运气不好.

所有用户共享相同的日志文件非常重要,但是我更改尽可能少的代码也很重要.

编辑添加:

\ProgramData\MyApp由标准Visual Studio安装程序创建.(我没有看到任何设置目录安全性的地方.)创建\MyApp它时授予Users这些权限:

Read & execute  
List folder contents
Read
Special permissions
Run Code Online (Sandbox Code Playgroud)

Advanced我看到特殊权限包括:

Create files / write data
Create folders / append data
Write attributes
Write extended attributes
Run Code Online (Sandbox Code Playgroud)

egr*_*nin 6

每个人都尝试+1,但最终我找到了答案:

如何从c ++更改ACL?

我确实需要更改该解决方案的一行,由此:

ea[0].grfAccessMode = DENY_ACCESS;
Run Code Online (Sandbox Code Playgroud)

对此:

ea[0].grfAccessMode = GRANT_ACCESS;
Run Code Online (Sandbox Code Playgroud)