В качестве фона: моему приложению требуются:
- права администратора
- доступ к библиотекам WinAPI
- , возможность работы на всех ОС: Win7-Win10
Обычно, чтобы использовать API, я могу просто связать необходимые * .lib файлы. Однако он использует порядок поиска по умолчанию, то есть (согласно https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order) сначала загружает библиотеки DLL из «каталога, из которого загружено приложение». В результате, если DLL находится в том же каталоге, запуск моего приложения двойным щелчком мыши также загружает эту DLL. Я хочу искать библиотеки DLL только в системных каталогах (аналогично { ссылка }).
Я знаю, что могу попытаться создать какой-то прокси, например
BOOL WinAPIFunction(WinAPIType param) {
return reinterpret_cast<decltype(&WinAPIFunction)>(
reinterpret_cast<void*>(GetProcAddress(manually_loaded_module, "WinAPIFunction")))(param);
}
Но трудно поддерживать все эти функции. Есть ли лучший способ заставить windows смотреть только в system32? Я думал о файле манифеста, но он требует версию для каждой библиотеки DLL, которая может нарушить требование «возможности» (версии DLL для Win7 и Win10 имеют разные версии)