35

我在获取进程的特定 PID 时遇到问题,这个进程的问题是它是一个隐藏进程,它没有显示在任务管理器/powershell 上,完全隐藏。

我所做的是这个过程的主窗口句柄,问题是,我怎样才能得到它的pid。

我想要做的是读取这个进程的内存并对其进行编辑,但是如果没有我猜的 PID 就无法这样做(因为我需要在内存中获取它的基地址)。

所以,如果有人有任何解决方法或对我有用的东西,那就太好了。

PS:这个过程没有显示在 Process.GetProcesses() 中。

泰!

4

2 回答 2

52

您可以使用以下 Windows API:

[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);

您传入 HWND 并使用 out 参数返回 PID。

您可以在 MSDN上阅读有关此功能的更多信息。

于 2013-08-12T10:27:41.410 回答
9

您需要将 P/invoke 与 Windows API 一起使用。

在你的类中声明一个函数,比如

 [DllImport("User32.dll")]
 static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

然后在你的课堂上调用它。

请参阅PInvoke

于 2013-08-12T10:30:19.290 回答