为什么在多次调用CreateProcess或只调用一次时,我会泄漏两个句柄?

时间:2016-10-25 09:20:26

标签: c++ windows handle createprocess resource-leak

根据update_aliases我在拨打GetProcessHandleCount时丢失了两个句柄。请查看以下最小示例,该示例将创建一个子进程。在创建子进程之前,将检查句柄数。然后关闭CreateProcess结构中返回的子进程句柄,然后再次计算句柄。我得到PROCESS_INFORMATION句柄的区别 - 有谁知道为什么?

同样有趣的是:如果我在下面的示例中的for循环中创建多个子进程,我也会"泄漏"正好两个手柄。

编辑:请注意,在StartupInformation结构中没有返回句柄,因此没有任何内容可以关闭。

有人可以向我解释两个手柄的区别吗?

2

1 个答案:

答案 0 :(得分:0)

UKMonkey是对的,它将加载apphelp.dll,这将打开两个句柄:

请参阅以下两个屏幕截图,显示加载/打开的dll和句柄:

DDLs and handles before calling CreateProcess

DLLS and handles after calling CreateProcess

通过调用LoadLibrary加载dll本身会打开SESSION MANAGER的句柄,第一次调用CreateProcess会打开Custom Locale的句柄。