检测子进程 是否有一种方法(在C++和WindowsXP中)检测一个进程是否产生其他进程?< /P>

检测子进程 是否有一种方法(在C++和WindowsXP中)检测一个进程是否产生其他进程?< /P>,c++,windows,C++,Windows,比如说, system32中的write.exe生成wordpad.exe然后消失,是否有函数告诉我进程是否要这样做 对于感兴趣的人,我使用msdn的以下部分解决了问题: http://msdn.microsoft.com/en-us/library/aa390425(v=VS.85).aspx您可以在进程树上枚举,该进程树标识正在运行的进程及其父进程。这与您想要的相反(您想要标识子进程,而不是父进程)。当然,通过在枚举时跟踪父进程ID,您可以确定给定进程产生了哪些子进程 为此,请调用,然后使用

比如说,

system32中的write.exe生成wordpad.exe然后消失,是否有函数告诉我进程是否要这样做

对于感兴趣的人,我使用msdn的以下部分解决了问题:

http://msdn.microsoft.com/en-us/library/aa390425(v=VS.85).aspx

您可以在进程树上枚举,该进程树标识正在运行的进程及其父进程。这与您想要的相反(您想要标识子进程,而不是父进程)。当然,通过在枚举时跟踪父进程ID,您可以确定给定进程产生了哪些子进程

为此,请调用,然后使用和枚举进程。枚举将填充包含
th32ParentProcessID
成员的结构


这是一种轮询方法;可能还有另一种方法可以实际挂接
CreateProcess
函数,但我没有这方面的任何信息。

我认为您需要创建一个全局挂接DLL,将其自身连接到每个正在运行的进程。DLL然后找到一个位置,在该位置对CreateProcess的函数调用从内核32映射到实际的CreateProcess,并更改一个表条目以将调用重定向到它自己的代码,从而“检测”对CreateProcess的调用。所有这些都假设某些用户防火墙不会阻止全局钩子的执行。

Win32 API中对此没有任何内容。但是,它是通过WMI和Win32_ProcessStartTrace查询支持的。您将在中的我的答案中找到一些C#代码来演示查询。在C++中编写WMI代码是相当痛苦的,你会发现一个链接到样板代码,你必须在MSDN文库文章中写。
请注意,这并不是特别快。我不清楚WMI提供程序在生成通知方面从内核获得了多少帮助,但考虑到它像轮询一样的速度。换言之,当您收到通知时,流程很可能会顺利进行。在多任务操作系统上,这是另外一个标准。

答案是Windows特定的,并且与C++有点无关,因为C++本身对这些概念一无所知。但我对答案很好奇。@John Dibling:你是说操作系统特定吗?我相当肯定你可以在Linux下确定“父进程”。我知道你可以检测进程的父进程,但这不是我的问题。我想知道是否有可能检测到一个进程何时会产生另一个进程,即使是Windows特定的进程也有点广泛,因为它需要驱动程序,所以在不同的Windows“风格”之间会有所不同。关于如何在XP上实现的一个比较老的例子(应该可以在较旧的NTs上实现),请参见这里:AFAIK没有直接的API,但是您可以随时观察过程(轮询)。检查进程父进程有点没有文档记录,而且也不可靠。为什么要这样做?您好,是的,我在程序中已经有了该功能,但是您的方法将意味着在进程树上迭代,即使可能没有生成子进程。我更希望它是一个基于事件的解决方案,即当一个进程调用createprocess(或类似函数)时会发出一些东西。谢谢,找到了msdn的这一部分,回答了我的问题:)@Tom,我尝试了这个示例,它确实会发出事件通知,但它是通过COM接口发出的。你有例子说明你是如何让它工作的吗?