从进程ID获取Winstation名称

时间:2009-05-29 15:59:22

标签: c windows winapi msdn

我正在尝试获取winstation的名称(例如“winsta0”),即仅使用其进程ID打开了一个单独的进程。我在MSDN上找不到任何这样的功能。它们似乎只有GetProcessWindowStation(),它只适用于您自己的进程。

有什么想法吗?

更新: 也许这是这个难题的一部分......

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  1. 使用VirtualAllocEx()在目标进程中分配一些可执行内存
  2. 使用WriteProcessMemory()将一些代码写入该内存
  3. 使用CreateRemoteThread()执行该过程中的代码
  4. 注入的代码将调用GetProcessWindowStation(),然后使用IPC机制将其发送回您的进程。获得它之后,使用VirtualFreeEx()来恢复目标进程的原始地址空间。在另一个用户的进程中使用此问题还有一些其他问题,但如果您以管理员身份运行它仍然有用。