LoadLibrary() 文件路径

LoadLibrary() file path

我正在尝试使用 LoadLibrary(...) 函数,该函数将字符串接收到文件名(.dll 或 .exe)或文件路径。我遇到的问题是文件名本身有多个 periods/dots。

示例:

HINSTANCE hInst = LoadLibrary(_T("..\folder\file.name.dots.exe"));

句柄始终为空,在这种情况下我不能简单地更改文件名。 Microsoft 在 https://support.microsoft.com/en-ca/kb/324468 中提到了多个句点,但我认为它不适用于文件名。有什么想法吗?

如参考文章中所建议,始终计算完全限定路径并将其传递给 LoadLibrary/LoadLibraryEx()。这不仅可以解决点缺陷,还可以防止安全漏洞。劫持您应用程序的当前目录可能会导致您的应用程序 运行 任意代码。

请参阅 MSDN on LoadLibraryEx 以更好地了解使用 LoadLibrary 的复杂性。

在我看来,这位先生的问题源于一个 BASENAME 中的多个点,如:

c:\users\joe\elephant.doc.old

当然,伴随而来的 "mangled filename" 约定将其映射为如下内容:

c:\users\joe\elepha~2.old

如果你使用损坏的文件名——在 DOS 中可见 window——你应该没有问题,我的年轻朋友。