egr*_*nin 6 c++ file-permissions windows-vista
我正在修改旧的C++程序以在Vista上运行.它不需要管理员权限.
我已经更改了将日志文件放入的代码\ProgramData\MyApp\.这些日志文件是书面的stdio功能(fopen,fprintf,fclose).
这是问题所在:
UserA首先运行程序,它\ProgramData\MyApp\MyLogFile.txt使用创建CreateFile()
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)
每个人都尝试+1,但最终我找到了答案:
我确实需要更改该解决方案的一行,由此:
ea[0].grfAccessMode = DENY_ACCESS;
Run Code Online (Sandbox Code Playgroud)
对此:
ea[0].grfAccessMode = GRANT_ACCESS;
Run Code Online (Sandbox Code Playgroud)