0

我正在使用NtQueryInformationProcess( ) 在 Windows 7 上检索另一个进程的命令行(通过NtQueryInformationProcess () 返回的 PEB 中的 RTL_USER_PROCESS_PARAMETERS)。

这通常可以正常工作,但是当启动同一可执行文件的多个实例时,所有实例的命令行字符串都是相同的:它始终是启动的第一个实例的命令行。GetCommandLine() 为每个进程返回正确的命令行。

有人可以证实或伪造这一点吗?

4

1 回答 1

1

您可能缺少的是 PEB 中的每个指针仅与 PEB 进程的地址空间相关,而不是调用 NtQueryInformationProcess 并检索 PEB 的进程。您必须使用 ReadProcessMemory 来引用指针。否则,由于进程的布局可能类似,您最终会读取 NtQueryInformationProcess 调用者的命令行,而不是 PEB 进程的命令行。

我可以确认,对每一级指针间接使用 NtQueryInformationProcess 和 ReadProcessMemory 可以正确获取所有进程的命令行。有关源代码示例,请参阅https://stackoverflow.com/a/13408150/1236546

于 2013-01-23T23:37:32.553 回答