【问题标题】:Can AdjustTokenPrivileges elevate the privilege as Administrator?AdjustTokenPrivileges 可以提升管理员权限吗?
【发布时间】:2012-08-14 16:56:39
【问题描述】:

windows下需要管理员权限的程序启动时必须得到用户的权限。他们也可以通过右键单击EXE并选择“以管理员身份运行”来以管理员权限运行。但是,在 EXE 启动之前,会出现一个消息框。真恶心。

现在我希望我的应用程序以管理员身份运行,并且我不想在用户单击 EXE 文件时弹出消息框。

现在我想知道 AdjustTokenPrivileges 函数是否可以帮助我实现这一点。

谁能帮帮我?

【问题讨论】:

  • 您的用例是什么?换句话说,您的应用程序有什么特别之处,这意味着它需要以管理员身份运行而无需获得用户的许可?

标签: c++ windows visual-studio-2010 visual-c++ mfc


【解决方案1】:

您对权利和特权感到困惑。至少从 Windows API 的角度来看,两者是完全不同的(尽管它们在很多时候被视为同义词,至少在处理“你可以在 Windows 上做什么”时)。

您真正需要的是提升权利的能力。如果系统的安全模型存在一些缺陷,您应该无法做到这一点。要获得管理权限,其目的是代码必须在管理帐户下运行——或者由用户最初以管理员身份登录,或者由他们在运行时输入凭据,如您所见。

权限(AdjustTokenPrivileges 实际操作的)是您有权利 做的事情,但在没有明确启用该权限的情况下仍然不允许做.例如,假设您开始以管理员身份登录。这给了你调整系统时钟的权利——但是调整系统时钟是正常程序几乎没有理由去做的事情,所以他们在你做之前增加了一个额外的步骤——您需要先启用SE_SYSTEMTIME 权限,然后才能使用该权限。

如果您使用没有权利更改系统时间的帐户登录,则根本无法更改。如果您登录的帐户可以更改它,则必须先启用该权限才能执行此操作。

底线:AdjustTokenPrivileges 不会完成你想要做的事情。

【讨论】:

    【解决方案2】:

    其实有一种方法可以让你通过调用LogonUser API 函数来改变线程的安全凭证。它返回可用于ImpersonateLoggedOnUserCreateProcessAsUser 调用的令牌句柄。这种技术称为非人格化。

    但是,我认为您正在尝试实现不同的目标 - 在没有 UAC 用户通知的情况下以提升的管理权限运行进程。您可以在 msconfig 实用程序中完全禁用 UAC,这是一个非常糟糕的解决方案,或者让您的程序保持原样,因为坦率地说,用户有权知道您的程序何时以超级用户权限运行,并禁用它通知应该是他的决定。

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2010-11-27
      • 2017-01-06
      • 2019-07-15
      相关资源
      最近更新 更多