Windows下的程序需要管理员权限才能在用户启动时获得用户的权限。并且他们也可以通过右键单击EXE并选择“以管理员身份运行”来管理员权限运行。但是,在EXE开始之前,会出现一个消息框。真的很恶心。
现在我希望我的应用程序以管理员身份运行,当用户单击EXE文件时,我不想要弹出消息框。
现在我想知道AdjustTokenPrivileges函数是否可以帮助我实现这个目标。
任何人都可以帮助我?
答案 0 :(得分:8)
你在权利和特权之间感到困惑。至少从Windows API的角度来看,两者完全不同(尽管它们在很多时候都被视为同义词,至少在处理“你可以在Windows上做什么”时)。
您真正想要的是提升权利的能力。缺少系统安全模型中的一些缺陷,您应该无法做到这一点。要获得管理权限,目的是代码必须在管理帐户下运行 - 最初由用户以管理员身份登录,或者由他们在运行时输入凭据,如您所见。
权限(AdjustTokenPrivileges
实际操作的权限)是您正确要做的事情,但如果没有专门启用,仍然不允许这样做那种特权。例如,假设您开始以管理员身份登录。这为你提供了正确的来调整系统时钟 - 但调整系统时钟是普通程序几乎从来没有理由做的事情,所以他们在你做之前增加了一个额外的步骤 - 您需要启用SE_SYSTEMTIME
权限才能使用该权限。
如果您是在没有权限的帐户下登录来更改系统时间,则根本无法执行此操作。如果您已登录可以更改帐户的帐户,则必须先启用该权限,然后才能执行此操作。
底线:AdjustTokenPrivileges
无法实现您的目标。
答案 1 :(得分:0)
实际上有一种方法可以让你通过调用LogonUser
API函数来更改线程的安全凭证。它返回一个可以在ImpersonateLoggedOnUser
和CreateProcessAsUser
调用中使用的令牌句柄。这种技术被称为非人格化。
Howewer,我认为您正在尝试实现不同的事情 - 在没有UAC用户通知的情况下运行具有提升的管理权限的流程。您可以在msconfig实用程序中完全禁用UAC,这是一个非常糟糕的解决方案,或者保留您的程序,因为坦率地说,用户有权知道,当您的程序以超级用户权限运行时,并禁用此功能通知应该是他的决定。