是否可以在 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 钩子的更多信息:
- A tutorial on CodeProject
- Microsoft Detours 是 Microsoft 的 API 挂钩库。
综上所述,对于您的具体情况,您最好只更改您的 TortoiseSVN 设置。如果您将 Tortoise 中的 include/exclude 路径设置为仅查看计算机上包含 SVN 存储库的目录,我敢打赌只要您避开这些目录,这种冻结就会消失。
我正在拼命寻找我的基于 Qt 的应用程序崩溃的原因。
经过一些观察我发现,即使没有选择任何文件,单独打开 QFileDialog(标准 windows 文件对话框)也会导致应用程序在几分钟后崩溃。它不会发生在所有机器上。
我已经在 dependency walker 中打开了我的应用程序,分析显示,打开文件对话框会加载大量 DLL,我的应用程序中不需要它们 - 所有挂钩的工具 windows shell。其中 - TortoiseSVN,甚至依赖于冻结。
是否可以在应用程序上下文中阻止加载其他 DLL,例如编解码器或 shell-hooks?
是否至少可以创建一个 QFileDialog 而无需加载 windows 中挂钩的所有工具?
这绝对有可能,但并非微不足道。您需要做的是在 LoadLibrary
上插入一个 API 挂钩(and/or 本机 API 等效项。)调用挂钩时,您可以检查 DLL 文件名并决定是否要将其传递给真正的 LoadLibrary
或 return 一个错误。
几个地方可以找到关于 API 钩子的更多信息:
- A tutorial on CodeProject
- Microsoft Detours 是 Microsoft 的 API 挂钩库。
综上所述,对于您的具体情况,您最好只更改您的 TortoiseSVN 设置。如果您将 Tortoise 中的 include/exclude 路径设置为仅查看计算机上包含 SVN 存储库的目录,我敢打赌只要您避开这些目录,这种冻结就会消失。