在操作系统启动时启动提升权限的应用程序,而无需UAC提示

时间:2020-04-22 17:57:27

标签: windows delphi startup uac elevated-privileges

我正在为Windows开发一个程序,该程序包含两个组件:

  1. 内核驱动程序(已签名EV证书)
  2. 用户级GUI组件,.exe文件(用Delphi编写)。

.exe需要运行高级权限,才能启动驱动程序并执行其他高级任务。

这样的程序如何在Windows启动时自动运行而不显示UAC提示符?

我看到许多类似的应用程序,例如反恶意软件程序,都可以在没有UAC提示的情况下提升权限。

我正在考虑以下选项,如果您能指出正确的方向,将不胜感激:

1。将驱动程序启动设置为自动,从内核服务启动.exe

但是,我的研究表明,没有从内核启动用户级进程的书面方法。

2。创建一个单独的用户级服务,该服务将启动.exe

我了解到用户级别的服务不受UAC的约束。

一种可能的方法是创建一个自动启动的用户级服务,该服务仅运行.exe进程(使用CreateProcessAsUser()),然后自行终止。

3。将.exe程序从Delphi GUI应用程序转换为用户级服务

类似于选项2,但是我们没有为服务创建单独的.exe,而是将当前的GUI应用程序转换为也可以作为服务工作。 我在this StackOverflow thread上找到了一些与此有关的文档。 但是,与创建单独的专用服务相比,这种方法似乎更复杂。

4。 EV证书是否有一些优势可以执行此任务?

5。除了上述方法,还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:1)

正如Sertac Akyuz在其评论中指出的那样,您应该为此使用Windows Task Schedluer。

使用Task Scheduler,您可以创建一个将在用户登录时运行的任务,并以最高的可用特权运行EXE。

当我说可用的最高特权时,指的是当您在When running the task, use the following user account字段中指定一组用户时,当前用户的最高特权,前提是当前用户是该组的成员。因此,如果当前用户没有足够的权限执行具有提升特权的程序,则该任务将以标准特权执行您的应用程序。

但是根据字段名称的建议,您还可以指定此任务将始终使用特定的用户帐户运行您的应用程序,这意味着它将使用该帐户特权级别而不是当前用户帐户。

使用任务计划程序执行某些驱动程序附带的GUI应用程序的任何方式都非常流行。例如,华硕使用这种方法来启动其AI Suite程序,该程序允许监视和调整其主板的各种设置。这是在我的计算机上配置此类任务的方式。

ASUS AI Suite II task properties - General ASUS AI Suite II task properties - Triggers ASUS AI Suite II task properties - Actions ASUS AI Suite II task properties - Settings

PS:我故意选择向您显示ASUS AI Suite的任务属性,因为它实际上是由Delphi制作的

相关问题