c++ - UAC 打开时如何在 VC++ 6.0 中创建文件?

标签 c++ windows windows-vista uac

如何在 UAC 打开时使用 C++ 创建文件,但不以管理员身份运行?

当 Vista 的 UAC 打开时,我试图在以下路径中创建一个文本文件:VC++ 6.0 中的“C:\Programdata\Desktop”。但是,Createfile(...) 因“权限被拒绝”而失败。

当我以“以管理员身份运行”运行示例应用程序时,它可以正常工作。但是我的示例应用程序不应“以管理员身份运行”。

当 UAC 打开时,是否有任何 API 可以授予上述路径的权限?

示例代码: 常数 nSize = 100; CStdioFile 文件; CFileException obFileExp; CString csFilePath(_T("C:\ProgramData\Desktop\sample.txt"));

if (!file.Open( csFilePath , CFile::modeCreate | CFile::modeWrite ,&obFileExp ) )
{
    // opening of file failed  
    TCHAR szErr[nSize];
    obFileExp.GetErrorMessage(szErr,nSize);
    AfxMessageBox(szErr);
    return ;
}  

file.WriteString( "welcome" );

file.Close( );

注意:UAC 应该打开并且 VC++ 6.0 不应以管理员身份运行

最佳答案

C:\ProgramData\Desktop 是 C:\Users\Public\Desktop 的别名 - 这是所有用户共享的桌面,旨在由系统管理员配置。

启用 UAC 后, guest 、用户组成员或管理员组的非提升成员无法在不破坏 Windows 的整个安全模型的情况下在共享桌面上创建文件或文件夹。

例如,可以使用管理员帐户 - 在应用程序设置期间的 UAC 提升期间 - 添加访问控制列表条目,授予用户组成员对子文件夹或文件的某种创建/写入控制权公共(public)\桌面。

因此,除非您的“示例程序”试图演示一种从未提升帐户在共享位置写入文件的方法,否则您最好在用户自己的桌面上创建文件 - c:\Users\YourUserAccount\桌面 - 您检索到的路径当然是使用适当的 (SHGetSpecialFolderLocation) API!

关于c++ - UAC 打开时如何在 VC++ 6.0 中创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073102/

相关文章:

windows-7 - Windows 7 是否仍然通过注册表分配事件日志权限?

c++ - 台式机问题

c++ - 使用 cmake : gtest/gtest. h 的 googletest 上的依赖项问题没有这样的文件或目录

c++ - 接受另一个模板参数的模板模板集合

Windows CLI 等同于 Linux 小于符号?

windows - Windows 10 上的 Docker VM 磁盘大小

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - gdb 退出并显示 : Program received signal SIGILL, 对使用 gcc/intel_mkl/gfortran -mavx 编译的 c c++ 程序的非法指令

windows - Mail::IMAPClient->new 在 Windows 中挂起

Windows Vista 上的 mysql 配置错误