У меня проблемы с подключением к процессу с помощью polyhook.По какой-то причине pDevice никогда не устанавливается.
#include "PolyHook.hpp"
#define CATCH_CONFIG_MAIN
#include "CatchUnitTest.h"
#include <d3d9.h>
/* this type is already defined in d3d9.h so i commented it out
typedef IDirect3D9* Direct3DCreate9(
UINT SDKVersion
);*/
typedef IDirect3D9*(__stdcall* tDirect3DCreate9)(UINT SDKVersion);
tDirect3DCreate9* otDirect3DCreate9;
tDirect3DCreate9 oDirect3DCreate9;
LPDIRECT3D9 pDevice;
LPDIRECT3D9 __stdcall hkDirect3DCreate9(UINT SDKVersion)
{
pDevice = oDirect3DCreate9(SDKVersion);
return pDevice;
}
DWORD WINAPI inject()
{
AllocConsole();
freopen_s((FILE**)stdout, "CONOUT$", "w", stdout);
std::cout << "SETUP" << std::endl;
HMODULE d3d = GetModuleHandle("d3d9.dll");
PLH::Detour* PLHDirect3DCreate9 = new PLH::Detour;
std::cout << "new DETOUR" << std::endl;
PLHDirect3DCreate9->SetupHook((BYTE*)GetProcAddress(d3d, "Direct3DCreate9"), (BYTE*)&hkDirect3DCreate9);
std::cout << "setup HOOK" << std::endl;
PLHDirect3DCreate9->Hook();
oDirect3DCreate9 = PLHDirect3DCreate9->GetOriginal<tDirect3DCreate9>();
while (!pDevice) {
std::cout << "no pdevice" << std::endl;
}
std::cout << "END" << std::endl;
std::cout << "pDevice: " << pDevice << std::endl;
for (;;) {
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD Reason, LPVOID lpReserved)
{
if (Reason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
HANDLE hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)inject, NULL, NULL, NULL);
CloseHandle(hThread);
}
return TRUE;
}
и мой вывод:
Я делаю что-то ужасно неправильно, но я не совсем уверенкакие.любое руководство будет полезно.моя конечная игра - установить LPDIRECT3D9 с помощью Direct3DCreate9
Я использую эту библиотеку из github https://github.com/stevemk14ebr/PolyHook
Я нашел другие посты об этой проблеме в Интернете, но никто не упомянул ихрешение.