【问题标题】:Get a Winstation Name from a Process ID从进程 ID 获取 Winstation 名称
【发布时间】:2009-05-29 15:59:21
【问题描述】:

我正在尝试获取仅使用其进程 ID 的单独进程打开的 winstation 的名称(例如“winsta0”)。我在 MSDN 上找不到任何可以做到这一点的东西。他们似乎只有 GetProcessWindowStation() 仅适用于您自己的进程。

有什么想法吗?

更新: 也许这就是谜题的一部分……

BOOL ProcessIdToSessionId( __in DWORD dwProcessId, __out DWORD *pSessionId );

【问题讨论】:

    标签: c windows winapi msdn


    【解决方案1】:

    您可能必须使用 EnumWindowStations()、EnumDesktops()、EnumDesktopWindows() 和 GetWindowThreadProcessId() 来查看所有正在运行的窗口,直到找到与所需进程 ID 匹配的窗口。

    【讨论】:

      【解决方案2】:

      好吧,我查看了 API 函数,但遇到了和你一样的死胡同。只要目标进程创建一个或多个顶级窗口,Remy 的建议就应该有效。我也想到了以下疯狂的想法:

      1. 使用 VirtualAllocEx() 在目标进程中分配一些可执行内存
      2. 使用 WriteProcessMemory() 将一些代码写入该内存
      3. 使用 CreateRemoteThread() 执行该进程中的代码

      注入的代码将调用 GetProcessWindowStation(),然后使用 IPC 机制将其发送回您的进程。获取后,使用 VirtualFreeEx() 恢复目标进程的原始地址空间。在其他用户的进程上使用它会产生一些额外的问题,但如果您以管理员身份运行,它应该仍然可以工作。

      【讨论】:

        猜你喜欢
        • 2011-05-05
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多