【问题标题】:Calling OpenWindowStation from a service running under a "user" account从在“用户”帐户下运行的服务调用 OpenWindowStation
【发布时间】:2015-10-06 01:54:35
【问题描述】:

我的服务启动一个交互式客户端进程,其内容与以下内容非常相似:https://msdn.microsoft.com/en-us/library/windows/desktop/aa379608(v=vs.85).aspx

服务以本地系统登录时有效,如果它在管理员帐户下运行使用 SE_ASSIGNPRIMARYTOKEN_NAMESE_INCREASE_QUOTA_NAME 权限。

我的问题是当使用 标准用户 帐户或 本地服务 时,它在 OpenWindowStation 失败,错误代码为 5(访问被拒绝)。

// Get a handle to the interactive window station.
hwinsta = OpenWindowStation(_T("winsta0"),               // the interactive window station 
                            FALSE,                       // handle is not inheritable
                            READ_CONTROL | WRITE_DAC);   // rights to read/write the DACL

是否可以从标准用户帐户调用 OpenWindowStation,或者我的服务必须在管理员帐户下运行?我尝试了几乎所有的本地政策,但都没有成功

谢谢!

【问题讨论】:

  • 您需要管理员权限才能使用 WRITE_DAC 访问权限打开其他人的窗口站。
  • 我试过没有 WRITE_DAC 访问,同样的错误
  • 嗯,是的 - 您需要管理员权限才能访问其他人的窗口站。我认为这是学术性的,因为您需要更改权限。而且我相当确定无论如何您都需要管理员权限才能启动新流程。 (如果您以交互登录的同一用户身份运行,可能有办法解决这个问题,但我不确定。)
  • 是的,看来我的服务必须在管理员帐户中运行,希望找到一种方法来赋予我的用户帐户特定的权限。
  • 恐怕不太可能。如果安全是一个问题,您可能需要考虑特权分离方法,即一个服务作为本地系统运行,其唯一工作是启动交互式客户端进程,一个服务以有限的权限运行并执行其他所有操作。

标签: c++ windows service impersonation privileges


【解决方案1】:

可惜做不到,好像只有管理员才能打开互动站。

【讨论】:

  • 将交互式进程转储到其他人的窗口站当然可以接管该用户的东西。
  • 完全同意,当我今天读到我的问题时,我不明白我为什么要问它:)
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2010-12-02
  • 2017-12-06
相关资源
最近更新 更多