gpt4 book ai didi

windows - LoadLibraryEx 忽略完全限定路径名?

转载 作者:可可西里 更新时间:2023-11-01 11:26:04 25 4
gpt4 key购买 nike

来 self 对 MSDN documentation 的阅读,我认为(在该基本名称的 dll 尚未加载的情况下)将完全限定的绝对文件名传递给 LoadLibraryExW 会查看该路径仅。

例如(请注意,这是正确的 CSIDL_SYSTEM 路径,如果有区别的话)

LoadLibraryExW (L"C:\\Windows\\System32\\foobar.dll", LOAD_LIBRARY_AS_DATAFILE);

如果该位置不存在该文件,则应该失败。但是我得到了一些有趣的结果,这让我觉得它采用了基本名称并将其应用于 Windows 8.1 上的 PATH。并在其他地方找到同名文件。

此外,如果我使用 LOAD_LIBRARY_AS_DATAFILE,它会阻止我找出它实际找到它的位置。

此功能真正在这方面做了什么,它是否随操作系统版本而变化?

(顺便说一句,我知道 LOAD_LIBRARY_SEARCH_SYSTEM32,但并非所有操作系统版本都存在。我想在任何早于 XP 的系统上运行。)

这特别令人困惑,因为我认为使用绝对路径是一个有效的解决方案,因为我以前看到它通过 PATH 找到不正确的文件,作为 LOAD_LIBRARY_SEARCH_SYSTEM32 的可移植替代方案。因此,它可能因操作系统而异,或者其他一些魔法会改变行为。

最佳答案

我观察到使用 Process Monitor用作 LoadLibraryEx 参数的完全限定文件名确实会导致只检查该路径(也就是说,当它确实需要加载文件时,因为有没有已加载该名称的 DLL)。这是针对 32 位进程观察到的。

对于 System32 目录,作为 C:\Windows\System32 作为参数给出的内容在 ProcMon 中显示为 C:\Windows\SysWOW64,在 64 位操作系统上。

这是在

中观察到的
  • Windows XP SP3,32 位(奇怪:如果 DLL 不存在,QueryOpen 将使用相同的路径调用两次)
  • Windows 7,32 位
  • Windows 10,64 位

需要注意的是,即使命名的 DLL 是从具有绝对路径的指定目录加载的,其依赖的 DLL 也会通过正常的 PATH 搜索加载。当使用 LOAD_LIBRARY_AS_DATAFILE 时,这不是问题。

关于windows - LoadLibraryEx 忽略完全限定路径名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com