PolyHook x64 не обходится без Direct3DCreate9 - PullRequest
0 голосов
/ 27 мая 2018

У меня проблемы с подключением к процессу с помощью 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;
}

и мой вывод: enter image description here

Я делаю что-то ужасно неправильно, но я не совсем уверенкакие.любое руководство будет полезно.моя конечная игра - установить LPDIRECT3D9 с помощью Direct3DCreate9

Я использую эту библиотеку из github https://github.com/stevemk14ebr/PolyHook

Я нашел другие посты об этой проблеме в Интернете, но никто не упомянул ихрешение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...