NtQueryInformationProcess似乎返回错误的命令行

时间:2012-05-22 15:25:58

标签: command-line instances ntdll

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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