是否可以在 windows 上防止其他应用程序挂钩系统 DLL

Is it possible on windows to prevent other applications hooking in system DLLs

我正在拼命寻找我的基于 Qt 的应用程序崩溃的原因。

经过一些观察我发现,即使没有选择任何文件,单独打开 QFileDialog(标准 windows 文件对话框)也会导致应用程序在几分钟后崩溃。它不会发生在所有机器上。

我已经在 dependency walker 中打开了我的应用程序,分析显示,打开文件对话框会加载大量 DLL,我的应用程序中不需要它们 - 所有挂钩的工具 windows shell。其中 - TortoiseSVN,甚至依赖于冻结。

是否可以在应用程序上下文中阻止加载其他 DLL,例如编解码器或 shell-hooks?

是否至少可以创建一个 QFileDialog 而无需加载 windows 中挂钩的所有工具?

这绝对有可能,但并非微不足道。您需要做的是在 LoadLibrary 上插入一个 API 挂钩(and/or 本机 API 等效项。)调用挂钩时,您可以检查 DLL 文件名并决定是否要将其传递给真正的 LoadLibrary 或 return 一个错误。

几个地方可以找到关于 API 钩子的更多信息:

综上所述,对于您的具体情况,您最好只更改您的 TortoiseSVN 设置。如果您将 Tortoise 中的 include/exclude 路径设置为仅查看计算机上包含 SVN 存储库的目录,我敢打赌只要您避开这些目录,这种冻结就会消失。