我正在尝试使用函数LoadLibrary(...),它将字符串接收到文件名(.dll或.exe)或文件路径。我遇到的问题是文件名本身有多个句点/点。
示例:
HINSTANCE hInst = LoadLibrary(_T("..\\folder\\file.name.dots.exe"));
句柄始终为null,在这种情况下我不能简单地更改文件名。 Microsoft在gcc documentation中提到了多个句点,但我认为它不适用于文件名。有什么想法吗?
答案 0 :(得分:3)
根据参考文章的建议,始终计算完全限定的路径并将其传递给LoadLibrary
/ LoadLibraryEx()
。这不仅可以解决点缺陷,还可以防止出现安全漏洞。对应用程序的当前目录进行劫持可能会导致您的应用程序运行任意代码。
有关使用LoadLibrary的复杂性的更多信息,请参阅MSDN on LoadLibraryEx。
答案 1 :(得分:1)
在我看来,绅士的问题源于BASENAME中的多个点,如:
<强> C:\用户\乔\ elephant.doc.old 强>
当然,伴随的“受损文件名”约定将其映射为:
<强> C:\用户\乔\ elepha〜2.old 强>
如果你使用受损的文件名 - 在DOS窗口中可以看到 - 你应该没有问题,我年轻的朋友。