背景故事:我的Windows MFC C ++应用程序的Visual-Studio 2010安装程序包创建了一个数据文件夹C:\ MyDataFolder。由于这是在安装期间创建的,因此文件夹的所有者为NT AUTHORITY\SYSTEM
。我希望我的应用程序的所有(非管理员)用户都具有对此文件夹的完全访问权限,因此我添加了一些代码以授予所有经过身份验证的用户完全权限(SetEntriesInAcl, SetNamedSecurityInfo
等)。以管理员身份运行时,此方法可以正常工作。
为了让用户非常轻松,我想允许他们以管理员身份安装,然后以限制用户的身份运行程序,尝试设置这些权限,然后在必要时提示他们升级到管理员。 (这也将涵盖尚未拥有这些权限的现有安装。)我也已成功完成此操作(CredUIPromptForWindowsCredentials, CredUnPackAuthenticationBuffer, CredUIParseUserName, LogonUser, ImpersonateLoggedOnUser
)。这给了我一个提升的令牌。我在最后一次调用ImpersonateLoggedOnUser
时尝试过它。
问题:重试对SetNamedSecurityInfo
的调用仍然失败,拒绝访问。我还尝试使用AdjustTokenPrivileges
为我的提升令牌提供SE_TAKE_OWNERSHIP_NAME
权限,但这失败了" 并非所有引用的权限或组都分配给调用者&# 34;
我相信我需要拥有此文件夹的所有权,因为它归SYSTEM所有,但如果它还没有提供,我不知道如何为我的提升令牌提供SE_TAKE_OWNERSHIP_NAME权限。
我对这一切都很陌生,所以很有可能我错过了一些非常基本的东西。我还想到我应该制作一个在安装过程中运行的小应用程序并执行此操作,但是现在我已经走到这一步了,我很顽固并希望获得提升部分工作。谢谢你的帮助!