Только один вопрос, как поддельная winhttp.dll подгружает правильную? там такой же `LoadLibrary` происходит ведь? Он не возвращает указатель на уже загруженную в память либу?
Кстати, хороший вопрос, я даже не задумывался об этом) Судя по коду, он сначала пытается загрузить библиотеку с суффиксом "_alt", т.е. в данном случае это winhttp_alt.dll. Не знаю точно, для чего это нужно.
В дискорде видел такой вопрос: adde0109 (12.01.2020) Does mod assistant fix the wine bug by renaming winhttp to winhttp_alt.dll???
Обсуждение было про mod assistant, а не про _alt библиотеки, поэтому я так и не узнал, был ли он прав. Но, похоже, направление правильное. Типа если запускаешь в линуксе под Wine, то там какие-то проблемы с системной winhttp.dll, и вместо нее подсовывают winhttp_alt.dll в той же папке. По крайней мере звучит правдоподобно.
Ну а если _alt библиотека не найдена, то дальше все примитивно: просто берется путь к системным библиотекам и winhttp загружается по абсолютному пути:
GetSystemDirectoryW(dll_path, system_dir_len); ... (конкатенировать системную директорию и имя библиотеки) handle = LoadLibraryW(dll_path);
Дико познавательно, спасибо большое!
Только один вопрос, как поддельная winhttp.dll подгружает правильную?
там такой же `LoadLibrary` происходит ведь? Он не возвращает указатель на уже загруженную в память либу?
Кстати, хороший вопрос, я даже не задумывался об этом)
Судя по коду, он сначала пытается загрузить библиотеку с суффиксом "_alt", т.е. в данном случае это winhttp_alt.dll. Не знаю точно, для чего это нужно.
В дискорде видел такой вопрос:
adde0109 (12.01.2020)
Does mod assistant fix the wine bug by renaming winhttp to winhttp_alt.dll???
Обсуждение было про mod assistant, а не про _alt библиотеки, поэтому я так и не узнал, был ли он прав. Но, похоже, направление правильное. Типа если запускаешь в линуксе под Wine, то там какие-то проблемы с системной winhttp.dll, и вместо нее подсовывают winhttp_alt.dll в той же папке. По крайней мере звучит правдоподобно.
Ну а если _alt библиотека не найдена, то дальше все примитивно: просто берется путь к системным библиотекам и winhttp загружается по абсолютному пути:
GetSystemDirectoryW(dll_path, system_dir_len);
... (конкатенировать системную директорию и имя библиотеки)
handle = LoadLibraryW(dll_path);
Пруфы тут: https://github.com/nike4613/UnityDoorstop-BSIPA/blob/master/Proxy/proxy.h