gpt4 book ai didi

windows-services - 如何获取 CreateProcessAsUser 的有效用户 token ?

转载 作者:行者123 更新时间:2023-12-04 08:30:33 25 4
gpt4 key购买 nike

我有一个以普通用户身份运行的应用程序,一个以本地系统身份运行的服务。我希望应用程序能够告诉服务再次启动应用程序,一旦服务完成了其他一些事情。 (因此应用程序不会在服务执行它的“事情”时运行。)为了让服务能够以最初启动它的用户身份启动应用程序,它需要一个用户 token 。应用程序在退出之前将 token 发送到服务,但在服务尝试使用它时 token /句柄无效。 (它用它做的第一件事是 DuplicateTokenEx 来获取主 token 。)

用户 token 是否始终仅在调用 OpenProcessToken 的进程中有效?

有没有其他方法可以做到这一点?我不希望用户必须使用登录用户“登录”到应用程序。那只会是愚蠢的。我想我可以将“explorer.exe”的进程句柄从应用程序移交给服务,服务可以使用它来获取用户 token ,但这需要 PROCESS DUP HANDLE 访问权限。我对这个解决方案并不感到兴奋,但也许这是解决问题的方法?

最佳答案

您在这里有多个问题,所以我会尝试分别解决它们,如果我有误解,您可以纠正我:

  • 您的服务和用户应用程序似乎无法同时执行某些功能。为了实现这一点,您让服务停止应用程序,执行特殊功能,然后重新启动应用程序。如果这是正确的,那么在我看来,您存在设计缺陷。而不是停止,然后重新启动应用程序,您应该通过互斥使用命名互斥和/或使用 IPC 方法(例如命名管道)来协调对共享资源的访问来传达意图。
  • 用户 token 是否始终仅在调用 OpenProcessToken 的进程中有效?是的,您收到的 token 句柄是进程句柄表的索引,不能直接传输。您需要使用 DuplicateHandle ,这可能是您想要的,但可能会很困惑。
  • 您希望找到获取用户 token 以将应用程序启动到用户(交互式?) session 的最佳方式。如果是这种情况,最好的方法是检索用户的 session token 并使用它。您可以查看 this article和示例代码,它是在 C# 中,但应该相对容易转移到您选择的语言。

  • 编辑:更新为包括 Windows 2000。由于您在 SYSTEM 帐户下运行该服务,它可以打开进程本身的句柄(如果需要,进程可以发送其进程 ID)。然后它可以打开附加到该进程的 token ,复制它并使用生成的 token 启动(或重新启动)目标应用程序。

    关于windows-services - 如何获取 CreateProcessAsUser 的有效用户 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725113/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com