我如何控制DLL的搜索顺序以避免劫持?

问题描述 投票:2回答:2

作为背景:我的申请要求:

  • 管理员权限
  • 访问WinAPI DLL
  • 能够在所有操作系统上运行:Win7-Win10

通常,要使用API​​,我只需链接所需的* .lib文件。但是,它使用默认的搜索顺序,这意味着(根据https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)它首先从“应用程序的加载目录”中加载DLL。因此,如果DLL位于同一目录中,则通过双击运行我的应用程序也会加载该DLL。我只想在系统目录中查找DLL(类似于https://stackoverflow.com/a/46182665/9015013。)>

我知道我可以尝试创建某种代理,例如

    BOOL WinAPIFunction(WinAPIType param) {
  return reinterpret_cast<decltype(&WinAPIFunction)>(
    reinterpret_cast<void*>(GetProcAddress(manually_loaded_module, "WinAPIFunction")))(param);
}

但是很难维护所有这些功能。有什么更好的方法可以强制窗口仅在system32中显示?我考虑过清单文件,但是它要求每个DLL的版本都可以打破“功能”要求(DLL对于Win7和Win10具有不同的版本)

作为背景:我的应用程序需要:可以在所有操作系统上运行对WinAPI DLL的管理员特权:Win7-Win10通常,要使用API​​,我可以链接所需的* .lib文件。但是它使用...

c++ windows visual-studio dllimport
2个回答
0
投票

您可以尝试使用“已知DLL”功能:如果Windows“知道”该DLL,则Windows不会搜索dll文件。链接中描述了已知功能,您对此有疑问。


0
投票

该解决方案由@Eryk Sun在上面的评论中发布。

© www.soinside.com 2019 - 2024. All rights reserved.