如何使用本地C++检查Windows 7中的进程是否具有提升的特权?

8

如何在Windows 7中检查进程是否具有提升的特权(使用本机C ++,而不是C#/ C ++ .net)?

我已经寻找答案很长时间了,但我能找到的答案都是使用.NET框架的答案。


1
定义“elevated”是什么意思?特权?优先级?还是其他什么? - Steve Townsend
@Steve:根据其他回答,这是一个非常好的问题。我只是认为OP的意思是“提高优先级”,但这可能完全错误。 - John Dibling
还不清楚:是你的流程还是别人的? - Hans Passant
3
我写“提升的特权”是指该进程拥有“管理员权限”(指用户访问控制 - UAC)。 - TCS
显示剩余2条评论
1个回答

8

最简单的方法是调用IsUserAnAdmin函数。如果您需要更精确的信息,也可以使用GetTokenInformation函数,但在大多数情况下这是过度的。


2
Kenny是正确的,这很容易测试。编写一个应用程序,打印出您是否是管理员,并以提升和非提升运行它,以管理员和常规用户的身份登录(需要使用OTS进行提升)。在四次快速运行中,您将看到如果应用程序被提升,则会报告您为管理员,而与谁首先登录到计算机无关。 - Kate Gregory
就此而言,MSDN文章的最新建议是使用CheckTokenMembership。该函数是CheckTokenMembership的包装器。建议直接调用该函数来确定管理员组状态,而不是调用IsUserAnAdmin。 - susmits
1
@KateGregory 感谢您如此简单地解释这个问题;MSDN文档暗示它检查所有者用户的权限(所有者是否为管理员),但正如您所解释的那样,这是不正确的。 - wizzwizz4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接