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

时间:2015-04-09 20:50:36

标签: c++ windows qt dll svn-hooks

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

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

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:2)

这绝对是可能的,但这不是微不足道的。你需要做的是在LoadLibrary(和/或Native API等价物)上插入一个API钩子。当你的钩子被调用时,你可以检查DLL文件名并决定是否要将它传递给真实的LoadLibrary或返回错误。

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

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