管理员用户如何将文件保存为标准用户
How can an Admin User save a file as a Standard User
所以我有一个程序可以将文本文件保存到 C:\ProgramData\MED 文件夹
std::filesystem::path fileName("C:\ProgramData\MED\Data.txt");
int ret(0);
FILE *fp;
ret = _tfopen_s(&fp, fileName.c_str(), _T("w"));
if (ERROR_SUCCESS == ret)
{
_ftprintf_s(fp, _T("1 = Type\n"));
_ftprintf_s(fp, _T("MED = Name\n"));
fclose(fp);
}
现在,如果标准用户 运行 创建程序并创建 Data.txt 文件,则管理员用户可以 运行 相同的程序并删除该文件。
但是,如果管理员用户 运行 创建程序并创建 Data.txt 文件,则标准用户不能 运行 相同的程序并删除该文件。他们没有正确的权限。
这是我的删除代码:
for (const auto &entry2 : std::filesystem::directory_iterator("C:\ProgramData\MED"))
std::filesystem::remove_all(entry2.path());
那么如何save/create任何用户都可以删除或更新的文件?
雷米你是我的英雄。修改 SECURITY_DESCRIPTOR 非常容易。我只添加了一行代码:
std::filesystem::path fileName("C:\ProgramData\MED\Data.txt");
int ret(0);
FILE *fp;
ret = _tfopen_s(&fp, fileName.c_str(), _T("w"));
if (ERROR_SUCCESS == ret)
{
_ftprintf_s(fp, _T("1 = Type\n"));
_ftprintf_s(fp, _T("MED = Name\n"));
fclose(fp);
// Now give Standard Users permissions to modify/delete the file
SetNamedSecurityInfoA("C:\ProgramData\MED\Data.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL);
}
所以我有一个程序可以将文本文件保存到 C:\ProgramData\MED 文件夹
std::filesystem::path fileName("C:\ProgramData\MED\Data.txt");
int ret(0);
FILE *fp;
ret = _tfopen_s(&fp, fileName.c_str(), _T("w"));
if (ERROR_SUCCESS == ret)
{
_ftprintf_s(fp, _T("1 = Type\n"));
_ftprintf_s(fp, _T("MED = Name\n"));
fclose(fp);
}
现在,如果标准用户 运行 创建程序并创建 Data.txt 文件,则管理员用户可以 运行 相同的程序并删除该文件。
但是,如果管理员用户 运行 创建程序并创建 Data.txt 文件,则标准用户不能 运行 相同的程序并删除该文件。他们没有正确的权限。
这是我的删除代码:
for (const auto &entry2 : std::filesystem::directory_iterator("C:\ProgramData\MED"))
std::filesystem::remove_all(entry2.path());
那么如何save/create任何用户都可以删除或更新的文件?
雷米你是我的英雄。修改 SECURITY_DESCRIPTOR 非常容易。我只添加了一行代码:
std::filesystem::path fileName("C:\ProgramData\MED\Data.txt");
int ret(0);
FILE *fp;
ret = _tfopen_s(&fp, fileName.c_str(), _T("w"));
if (ERROR_SUCCESS == ret)
{
_ftprintf_s(fp, _T("1 = Type\n"));
_ftprintf_s(fp, _T("MED = Name\n"));
fclose(fp);
// Now give Standard Users permissions to modify/delete the file
SetNamedSecurityInfoA("C:\ProgramData\MED\Data.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL);
}