【发布时间】:2015-10-28 22:36:26
【问题描述】:
我的应用程序需要写入 \ProgramData 中可能受保护的文件。这只会在安装后发生一次。
是否有 API 函数可以获取 ACL 信息并提示用户授权应用访问文件?换句话说,该应用程序会要求 Windows 提示用户进行确认和授权。这应该以交互方式发生,并允许应用程序在访问文件被授权后恢复执行。该应用程序以标准用户身份运行,不需要管理员权限。
文件通过 CreateFile() 打开。
编辑:我的查询与其他被称为重复的查询之间存在细微差别。我正在请求访问一个特定对象(文件)的权限。其他人则要求提升整个过程的特权。无论如何,我感谢所有包含解决方案的回复。
【问题讨论】:
-
但是... 是不是有一些 GetNamedSecurityInfo、AllocateAndInitializeSid、SetEntriesInAcl、SetNamedSecurityInfo 等的组合可以让我只访问那个文件?我不希望整个过程以管理员身份运行。 CreateFile() 引用一个 SECURITY_ATTRIBUTES 事物。看来我可以获得一个 SECURITY_ATTRIBUTES 对象,将它传递给 CreateFile,然后就可以了!
-
根据
CreateFile()documentation: "一个指向 SECURITY_ATTRIBUTES 结构的指针,该结构包含两个独立但相关的数据成员:一个可选的安全描述符和一个布尔值,用于确定返回的句柄是否可以由子进程继承。... CreateFile 在打开现有文件或设备时忽略 lpSecurityDescriptor 成员,但继续使用 bInheritHandle 成员。" -
完全没有区别。这是一个骗局很多次。如果您不同意,那么您仍然不了解 UAC。重新开放的选民显然也不明白这一点。
-
我只是重新打开它,以便发布我的解决方案,我立即再次关闭它。请向我展示另一个具有相同解决方案的 Stackoverflow 帖子,包括 ShellExecuteEx、lpFile = "cmd" 和 double 命令。
-
20020450不算,也没有提到UAC,只有找到解决方案才能找到。