在Windows上删除C++中的权限

Nit*_*amk 18 c++ permissions uac

在Windows上运行的C++应用程序是否有可能在运行时删除权限?

例如,如果用户以管理员身份启动我的应用程序,但没有理由以管理员身份运行我的应用程序,我是否可以某种方式放弃管理员权限?

简而言之,我想在main()函数中编写代码来删除我不需要的权限(例如,Windows目录上的写访问权限).

Mic*_*ael 17

是的,您可以使用AdjustTokenPrivileges从令牌中删除不需要的和危险的权限.如果不是立即需要,您可以禁用(稍后可以启用该权限)或者完全从您的令牌中删除权限.

您还可以通过CreateRestrictedToken创建受限令牌,并重新启动使用该受限令牌运行的应用程序.CreateRestrictedToken可用于禁用权限并从令牌中删除组(如管理员组).

您可以使用AdjustTokenGroups从正在运行的进程的令牌中删除管理员组,但我从未在已经运行的进程上尝试过此操作.

请注意,特权不包含对Windows目录的写访问权限.系统中的资源具有ACL,用于管理谁有权访问.系统和管理员具有对Windows目录的写访问权限.