Приветствую. Пытаюсь грузить user32.dll через heavens gate из-под wow64 проги (код ниже прилагается). Парадокс в том что такие дллки например как kernel32.dll, ws2_32.dll и advapi32.dll грузятся без проблем, а вот например user32.dll и ole32.dll крашат прогу.
Я вначале подумал что дело в том что я через LdrLoadDll гружу и видимо чёто не учёл и чтобы наверняка было уже взял обычный LoadLibraryA, но результат тот же.
Вопрос: что делать чтобы работало?)
*Подозреваю нужно подгрузить какие-то базовые 64-битные дллки необходимые для работы user32.dll . Кто знает какие?
*pRtlInitUnicodeString, pLdrLoadDll, pLoadLibraryA, hKernel32 проверял, с ними всё ок. Debug выводится при kernel32.dll, при user32.dll нет, ибо прога крашится.
Я вначале подумал что дело в том что я через LdrLoadDll гружу и видимо чёто не учёл и чтобы наверняка было уже взял обычный LoadLibraryA, но результат тот же.
Вопрос: что делать чтобы работало?)
*Подозреваю нужно подгрузить какие-то базовые 64-битные дллки необходимые для работы user32.dll . Кто знает какие?

*pRtlInitUnicodeString, pLdrLoadDll, pLoadLibraryA, hKernel32 проверял, с ними всё ок. Debug выводится при kernel32.dll, при user32.dll нет, ибо прога крашится.
C++:
//heavens gate от rew0lf
//Если кто-то решит собрать у себя не забудьте вначале проги InitWow64ext() =)
DWORD64 hNtdll = GetModuleHandle64(L"ntdll.dll");
DWORD64 pLdrLoadDll = GetProcAddress64(hNtdll, (char*)"LdrLoadDll");
DWORD64 pRtlInitUnicodeString = GetProcAddress64(hNtdll, (char*)"RtlInitUnicodeString");
HMODULE hKernel32 = 0;
UNICODE_STRING unicodestring;
X64Call(pRtlInitUnicodeString, 2, (DWORD64)&unicodestring, (DWORD64)L"kernel32.dll");
X64Call(pLdrLoadDll, 4, (DWORD64)0, (DWORD64)0, (DWORD64)&unicodestring, (DWORD64)&hKernel32);
DWORD64 pLoadLibraryA = GetProcAddress64((DWORD64)hKernel32, (char*)"LoadLibraryA");
X64Call(pLoadLibraryA, 1, (DWORD64)"ws2_32.dll");
MessageBoxA(0, "Debug", 0, 0);