是否有可能在Windows上阻止其他应用程序挂钩在系统DLL中

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

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

我已经打开了我的应用程序在依赖沃克和分析显示,打开文件对话框加载DLL吨,我不需要在我的应用程序 – 所有的工具,在Windowsshell挂钩。 在其他 – TortoiseSVN,甚至使取决于冻结。

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

至less有可能创build一个QFileDialog而不加载所有的工具挂在窗口?

在这里输入图像说明

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

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

  • 一个关于CodeProject的教程
  • Microsoft Detours是微软的API钩子库。

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