我正在研究一个Python module for managing processes的核心部分.代码在C中被编写为Python扩展,并将被更高级的Python库包装.该项目的目标是避免依赖于第三方库,如pywin32扩展,或者在命令行上调用’ps’或taskkill等丑陋的攻击,所以我正在寻找一种在C代码中执行此操作的方法.
我已经Google Googled,并发现一些简单的建议,使用CreateRemoteThread()注入到另一个进程,然后运行GetCommandLine(),但我希望有人可能有一些工作代码示例和/或更好的建议.
更新:我发现完整的演示代码和解决方案使用NtQueryProcessInformation在CodeProject:http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx – 这是不理想的,因为“不支持”直接从NTDLL结构剔除信息,但我会生活在它.感谢所有的建议.
更新2:我通过更多的Google搜索来挖掘不使用C代码的C版本,并且更直接/简洁地指向这个问题.详见http://wj32.wordpress.com/2009/01/24/howto-get-the-command-line-of-processes/.
谢谢!
解决方法
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/