如何检查可执行文件是否以管理员身份运行?

时间:2016-08-05 00:36:41

标签: c windows winapi elevated-privileges

我正在用c ++ / c编写一个应用程序。如何检测进程是否以管理员身份启动(右键单击以管理员身份运行)?

1 个答案:

答案 0 :(得分:2)

假设问题陈述是"如何确定我的流程是否在UAC"下被提升,

  1. 检查UAC是否已启用
  2. 检查library(RODBC) dbhandle <- odbcDriverConnect('driver={SQL Server};server=mysqlhost;database=mydbname;trusted_connection=true') # Main table query works well res <- sqlQuery(dbhandle, 'select * from Main') # I would like to filter it by date column res <- sqlQuery(dbhandle, 'select * from Main where Date > '2010-01-01'') 是否返回true
  3. 检查流程令牌的提升类型为IsUserAnAdmin()
  4. 如果所有三项测试均属实,则您的流程在UAC下已经提升。请注意,TokenElevationTypeFull检查本身就足够了,但在我们自己的代码中,如果将来还有其他类型的拆分令牌,我们会执行其他操作。

    <强>详细信息:

    1. 检查UAC是否已启用
    2. 可能还有其他方法可以做到这一点,但最简单的方法是查看注册表。如果注册表项GetProcessElevationType下存在值EnableLUA,则启用UAC。

      1. 检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System是否返回true
      2. 这很简单 - 只需调用IsUserAnAdmin()函数即可。请注意,不推荐使用此函数;您也可以使用IsUserAnAdmin()功能。

        1. 检查流程令牌的提升类型为CheckTokenMembership()
        2. 您可以使用以下功能获取令牌的提升类型:

          TokenElevationTypeFull