当前位置: 首页 > 面试题库 >

读取另一个进程的命令行参数(Win32 C代码)

公羊玉泽
2023-03-14
问题内容

我需要能够列出传递给其他正在运行的进程的命令行参数(如果有)。我已经具有系统上正在运行的进程的PID,因此基本上我需要确定传递给给定PID XXX的
进程的参数。

我正在研究用于管理流程的Python模块的核心部分。该代码使用C语言编写为Python扩展,并将由更高级别的Python库包装。该项目的目标是避免依赖第三方库(例如pywin32扩展名)或丑陋的黑客程序(例如在命令行上调用“
ps”或taskkill),因此我正在寻找一种使用C代码执行此操作的方法。

我在Google周围搜索了此内容,发现了一些使用CreateRemoteThread()将自己注入到其他进程中的简短建议,然后运行GetCommandLine(),但我希望有人可能有一些有效的代码示例和/或更好的建议。

更新
:我发现了完整的正常演示代码以及在CodeProject上使用NtQueryProcessInformation的解决方案:http
:
//www.codeproject.com/KB/threads/GetNtProcessInfo.aspx-这并不理想,因为“不支持”直接从中获取信息NTDLL结构,但我会继续使用。感谢所有的建议。

更新2 :我通过更多的谷歌搜索设法找到了一个不使用C
++代码的C版本,它更加直接/简洁地指出了这个问题。有关详细信息,请参见http://wj32.wordpress.com/2009/01/24/howto-
get-the-command-line-of-
processes/。

谢谢!


问题答案:

为了回答我自己的问题,我终于找到了一个CodeProject解决方案,该解决方案完全可以满足我的需求:

http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx

正如@Reuben已经指出的那样,您可以使用NtQueryProcessInformation检索此信息。不幸的是,这不是推荐的方法,但是鉴于唯一的其他解决方案似乎是要承担WMI查询的开销,我认为我们现在将采用这种方法。

请注意,如果在64位Windows操作系统上使用从32位Windows编译的代码,这似乎不起作用,但是由于我们的模块是从目标上的源代码编译的,因此对于我们的目的而言应该可以。我宁愿使用此现有代码,并且如果它在Windows
7或更高版本中无法使用,我们可以再次考虑使用WMI。感谢您的回复!

更新 :此处显示了同一技术的更简洁且仅C(相对于C ++)的版本:

http://wj32.wordpress.com/2009/01/24/howto-get-the-command-line-of-
processes/



 类似资料: