卸载多个库

时间:2017-02-27 19:07:42

标签: c++ windows dll reference-counting

我正在使用一个工具(certutil.exe),它正在加载我们编写的两个提供程序DLL,一个CSP DLL和一个CNG DLL。这两个都将加载我们编写的另一个DLL,提供PKCS11功能。该DLL还建立了加密硬件的会话。

每个DLL可以在不同的场景中独立使用,也可以一起加载,就像这里的情况一样。

当certutil完成后,它将卸载每个DLL。问题是(并且直到现在才检测到),每个DLL都将卸载pkcs 11库。第一次卸载时,将关闭所有会话并使句柄无效。当第二个DLL使用它们时,程序崩溃,因为句柄不再引用pkcs11 lib。如果我避免释放pkcs11 lib,那么我会泄漏硬件中的资源。

我的想法是实现某种形式的引用计数,但是,我不确定将它放在何处。 pkcs11 lib似乎有必要计算它已被加载的次数,并使其可用于任何希望查询计数的“更高级别”dll。如果计数> 1,然后减少计数。如果count == 1,则卸载dll和free资源。

虽然感觉“对我不对”......我必须遗漏某些东西,某些概念或其他东西。这不是第一个加载两个中间DLL的应用程序的情况,每个DLL加载一个共同的第三个DLL然后需要清理。

0 个答案:

没有答案
相关问题