Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从进程ID获取Winstation名称_C_Windows_Winapi_Msdn - Fatal编程技术网

C 从进程ID获取Winstation名称

C 从进程ID获取Winstation名称,c,windows,winapi,msdn,C,Windows,Winapi,Msdn,我正在尝试获取单独进程仅使用其进程ID打开的winstation(例如“winsta0”)的名称。我在MSDN上找不到任何这样做的内容。它们似乎只有GetProcessWindowsStation(),它只适用于您自己的进程 有什么想法吗 更新: 也许这是谜题的一部分 BOOL进程ID到会话ID( __在DWORD dwProcessId中, __输出DWORD*pSessionId ); 您可能必须使用EnumWindowsStations()、EnumDesktops()、EnumDeskt

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

有什么想法吗

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

BOOL进程ID到会话ID( __在DWORD dwProcessId中, __输出DWORD*pSessionId
);

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

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

  • 使用VirtualAllocEx()在目标进程中分配一些可执行内存
  • 使用WriteProcessMemory()将一些代码写入该内存
  • 使用CreateRemoteThread()执行该进程中的代码
  • 注入的代码将调用getProcessWindowsStation(),然后使用IPC机制将其发送回进程。获取后,使用VirtualFreeEx()恢复目标进程的原始地址空间。在另一个用户的进程中使用此选项还存在一些其他问题,但如果您以管理员身份运行,则此选项仍应有效