LoadLibrary() путь к файлу

Я пытаюсь использовать функцию LoadLibrary(...), которая принимает строку с именем файла (.dll или.exe) или путь к файлу. У меня проблема, когда само имя файла имеет несколько точек / точек.

Пример:

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

Дескриптор всегда нулевой, и я не могу просто изменить имя файла в этом случае. Microsoft упомянула несколько периодов в https://support.microsoft.com/en-ca/kb/324468 но я не верю, что это работает для имени файла. Есть идеи?

2 ответа

Решение

Как предлагается в указанной статье, всегда вычисляйте полный путь и передавайте его LoadLibrary/LoadLibraryEx(), Это не только устраняет точечный дефект, но и предотвращает уязвимость системы безопасности. Перехват текущего каталога для вашего приложения может привести к тому, что ваше приложение выполнит произвольный код.

См. MSDN на LoadLibraryEx для лучшего понимания сложностей использования LoadLibrary.

Мне кажется, что проблема джентльмена проистекает из нескольких точек в пределах BASENAME, например:

C:\ Users \ джо \elephant.doc.old

Есть, конечно, сопутствующее соглашение "искалеченного имени файла", которое отображает это в нечто вроде:

C:\ Users \ джо \elepha~2.old

Если вы используете искаженные имена файлов - которые видны из окна DOS - у вас не должно быть проблем, мой юный друг.

Другие вопросы по тегам