检测子进程

时间:2010-10-14 15:34:05

标签: c++ windows

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

例如,

system32中的write.exe生成wordpad.exe然后消失,是否有一个函数告诉我该进程是否即将执行此操作?

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

3 个答案:

答案 0 :(得分:3)

Win32 API中没有任何内容。但是,WMI通过Win32_ProcessStartTrace查询支持它。你会在this thread的答案中找到一些C#代码来演示查询。用C ++编写WMI代码非常痛苦,你可以在MSDN Library文章中找到指向样板代码的链接。

请注意,这不是特别快。我不清楚WMI提供程序从内核获取多少帮助来生成通知,但考虑到它像轮询一样嘎嘎叫的速度。换句话说,当您收到通知时,该过程可能会顺利进行。这是多任务操作系统课程的标准。

答案 1 :(得分:2)

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

要执行此操作,请致电CreateToolhelp32Snapshot,然后使用Process32FirstProcess32Next枚举流程。枚举将填充包含th32ParentProcessID成员的PROCESSENTRY32结构。

这是一种投票方法;可能有另一种实际挂钩CreateProcess功能的方法,但我没有任何相关信息。

答案 2 :(得分:0)

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