c – 是否可以在Windows上阻止其他应用程序挂钩系统DLL

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

经过一些观察,我已经检测到,单独打开一个QFileDialog,这是标准的Windows文件对话框,即使没有选择任何文件,也会导致应用程序在几分钟后崩溃.它不会发生在所有机器上.

我在依赖walker中打开了我的应用程序并且分析显示,文件对话框的打开加载了大量的DLL,我在我的应用程序中不需要这些DLL – 所有挂在windows shell中的工具.其中包括TortoiseSVN,它甚至取决于冻结.

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

是否至少可以创建一个QFileDialog而不加载挂在窗口中的所有工具?

最佳答案 这绝对是可能的,但这并非无足轻重.你需要做的是在LoadLibrary上插入一个API钩子(和/或Native API等价物.)当你的钩子被调用时,你可以检查DLL文件名并决定是否要将它传递给真正的LoadLibrary或返回一个错误.

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

> A tutorial on CodeProject
> Microsoft Detours是Microsoft的API挂钩库.

现在所有这些都说,根据您的具体情况,您可能最好只更改TortoiseSVN设置.如果你将Tortoise中的包含/排除路径设置为仅查看计算机上包含SVN repos的目录,我敢打赌,只要你避开这些目录,这个冻结就会消失.

点赞