【问题标题】:Run process as Local System作为本地系统运行进程
【发布时间】:2017-09-10 16:26:49
【问题描述】:

我有一个作为管理员进程运行的常规程序。但它并没有我需要的所有特权。如何提升此进程以作为本地系统帐户运行?

我不想使用任何外部工具来实现这种提升。如果我可以调用一些 Win32 函数来实现它,那将是理想的。我也愿意编写和运行 Windows 服务,以便将其权限传递给相关进程。

有人请给我一个线索。我的搜索只是让我转圈圈。

【问题讨论】:

  • “常规程序”不应作为本地系统运行。您需要本地系统权限的任务是什么?
  • 我想删除我所有的文件。这是我的系统,所以我为所欲为。当然,这是开玩笑的意思。但你明白了。我是一名专业开发人员,并不在寻找基本的软件原理。我正在寻找技术问题的技术解决方案。
  • 写一个windows服务并作为本地系统运行。
  • 据我所知,您必须将程序注册为服务才能这样做。 Google CreateService API
  • “我正在寻找技术问题的技术解决方案”。好吧,那就告诉我们问题所在。这是又一个 XY 问题。有一个隐含的假设,即它是可能的,甚至假设它通过提升发生,但提升是一个 UAC 概念,Local System 甚至不参与 UAC。实际上,既然是 XY 问题,我想微软从来不会费心去实现 Y 部分。

标签: c++ elevation


【解决方案1】:
  1. 程序将会话 ID 发送到服务
  2. 服务调用 OpenProcessToken 和 DuplicateTokenEx 创建本地系统令牌
  3. 服务调用 SetTokenInformation 来更改令牌会话 ID 以匹配程序的
  4. 服务调用 DuplicateHandle 来创建令牌句柄
  5. 服务向程序发送句柄
  6. 程序使用接收到的句柄调用 SetThreadToken

该程序将至少有一个具有本地系统权限的线程。这对我的目的来说已经足够了。

【讨论】:

  • 我们只能猜测为什么所有需要本地系统权限的事情都不能在服务中完成。
  • 因为本地系统没有权限做普通程序可以做的事情,所以不能在服务中做事情。这可能是一些初级 MS VB 程序员造成的死锁情况?也许你可以去向他们展示一些基本的软件原理。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
相关资源
最近更新 更多