在Windows上运行的C ++应用程序是否有可能在运行时删除权限?
例如,如果用户以管理员身份启动我的应用程序,但没有理由以管理员身份运行我的应用程序,我是否可以某种方式放弃管理员权限?
简而言之,我想在main()函数中编写代码来删除我不需要的权限(例如,Windows目录上的写访问权限)。
答案 0 :(得分:17)
是的,您可以使用AdjustTokenPrivileges从令牌中删除不需要的和危险的权限。如果不是立即需要,您可以禁用(稍后可以启用该权限)或者完全从您的令牌中删除权限。
您还可以通过CreateRestrictedToken创建受限制的令牌,然后重新启动使用该受限令牌运行的应用程序。 CreateRestrictedToken可用于禁用权限并从令牌中删除组(如管理员组)。
您可以使用AdjustTokenGroups从正在运行的进程的令牌中删除管理员组,但我从未在已经运行的进程中尝试过此操作。
请注意,特权不涵盖对Windows目录的写访问权限。系统中的资源有ACL's来管理谁有权访问。系统和管理员具有对Windows目录的写访问权。