如何保护自己免受加载到进程中的shell DLL的影响?

时间:2008-09-18 14:40:25

标签: winapi dll shell

当您使用GetOpenFileName()使用标准Windows“文件打开”对话框时,shell将加载显示文件列表所需的各种DLL,包括自定义文件列表。

在我的应用程序中,我发现TortoiseCVS用于在图标上绘制叠加层的DLL正在调用GdiPlusShutdown(),因此在显示“文件打开”对话框后的一段时间内,TortoiseCVS DLL将被卸载,它会关闭关闭GDI +和我的图形功能都会失败!

基本上任何旧的DLL都可以随时由我的应用程序加载并开始随机处理其状态似乎非常糟糕。在我的情况下,解决方法非常简单 - 只要重新启动GDI +,如果我发现它已被关闭。但是,如果发生这种情况发生在我无法调试的客户端计算机上,那么弄清楚发生了什么将会更具挑战性。

任何人都可以提供任何见解吗?我该怎么做才能阻止这种情况发生?

1 个答案:

答案 0 :(得分:1)

我不得不处理戴尔在其机器上的废话,特别是wxVault。我的解决方案是“简单地”修补代码。 DEP有点棘手,但仍然可行。你可以看看微软Detours,这是一种稍微更有条理的方式来做同样的事情。你仍然有DLL加载,但至少你可以阻止它调用它不应该调用的函数。

为什么Windows有这么糟糕的机制,请阅读Raymond Chen的“Old New Thing”博客或书籍。

相关问题