【问题标题】:How to protect yourself against shell DLLs loaded into your process?如何保护自己免受加载到进程中的 shell DLL 的影响?
【发布时间】:2008-09-18 14:40:25
【问题描述】:

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

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

我的应用程序可以随时加载任何旧 DLL 并开始对其状态进行随机操作,这似乎很糟糕。在我的情况下,解决方法非常简单——如果我检测到它已被关闭,只需重新启动 GDI+。但是,如果这发生在我无法调试的客户端机器上,那么要弄清楚发生了什么会更具挑战性。

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

【问题讨论】:

    标签: winapi dll shell


    【解决方案1】:

    我不得不处理戴尔在其机器上放置的垃圾,尤其是 wxVault。我的解决方案是“简单地”修补代码。 DEP 有点棘手,但仍然可行。你可以看看 Microsoft Detours,这是一种更结构化的方式来做同样的事情。您仍然可以加载 DLL,但至少您可以阻止它调用不应调用的函数。

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

    【讨论】:

    • wxVault - Embassy Trust Suite - 应以极端偏见终止:mikedimmick.blogspot.com/2007/12/…
    • 我喜欢 Raymond Chen 的博客!如果没有关闭,我会考虑将其放入建议框中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2017-02-24
    • 2010-10-01
    相关资源
    最近更新 更多