检测subprocess

有没有一种方法(在C + +和Windows XP中)来检测是否有一个进程产生任何其他进程?

例如,

system32中的write.exe产生wordpad.exe然后消失,是否有一个函数告诉我,如果进程即将做到这一点?

对于那些感兴趣的我使用msdn的这一部分解决了这个问题:
http://msdn.microsoft.com/en-us/library/aa390425(v=VS.85).aspx

Solutions Collecting From Web of "检测subprocess"

Win32 API中没有这个。 但是,它通过WMI与Win32_ProcessStartTrace查询来支持。 你会发现一些C#代码演示了我的答案在这个线程中的查询。 在C ++中编写WMI代码非常痛苦,您可以在MSDN Library文章中找到样板代码的链接。

要小心,这不是特别快。 对于我来说,WMI提供程序从内核获得多少帮助来生成通知并不是很清楚,但是考虑到了轮询的速度。 换句话说,在你收到通知的时候,这个过程很可能会顺利进行。 这是多任务操作系统上的课程。

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

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

这是一个轮询方法; 实际上挂钩CreateProcess函数可能有另一种方法,但我没有任何有关的信息。

我认为你需要制作一个全局钩子DLL,它自己附加到每个正在运行的进程上。 然后,DLL找到一个地方,将CreateProcess的函数调用映射到来自kernel32的实际CreateProcess,并更改表项以将调用重定向到它自己的代码,以“检测”对CreateProcess的调用。 所有这一切都假设一些用户防火墙不会阻止你的全局钩子执行。