以NETWORK SERVICE

时间:2016-02-07 00:44:11

标签: c#

我正在尝试使用LOCAL SYSTEM下运行的服务启动用户NETWORK SERVICE的流程。为此,我使用以下顺序的pinvoke操作:

  1. LogonUser()
  2. DuplicateTokenEx()
  3. LoadUserProfile()
  4. CreateEnvironmentBlock()
  5. CreateProcessAsUser()
  6. 使用上面的步骤我能够启动进程 - 我在事件查看器中看到了进程创建事件。但是,我创建的进程是一个C#应用程序,它会生成conhost.exe子进程并立即崩溃,原因可能是conhost.exe子进程崩溃(也显示在事件日志中 - 崩溃原因是DLL初始化失败)。 / p>

    我还发现,如果我在我的机器上授予NETWORK SERVICE管理员权限,我就可以使用上述步骤成功启动该过程。

    最后,我还尝试直接从在NETWORK SERVICE用户下运行的服务启动相同的进程,在这种情况下,它成功启动。这让我怀疑我试图启动新进程的上下文是不完整的,我错过了另一个操作来启动环境。

    我的方法有什么明显的错误吗?我在某处错过了一步吗?

1 个答案:

答案 0 :(得分:0)

问题是lpDesktop STARTUP_INFO结构的string.Empty字段设置不正确。如果该值未设置为Ti.App.currentUser = "user1"; Ti.App.Properties.setString("currentUser", "user1"); ,则新进程将尝试使用它无权访问的父进程的桌面。