CreateDevice hook

Начинающий
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Здравствуйте,
столкнулся с проблемой хука CreateDevice'a в игре GTA:SA. Проблема в следующем: хук наверняка рабочий, но проблема в его иницилизации, если например я буду иницилизировать хук в точке входа DLL происходит краш. Если же я иницилизирую хук когда игра уже полностью загружена - всё нормально, но вот только смысл хука уже пропал, так как девайс уже создан. Надеюсь на помощь от знающих. Спасибо. Ниже код.
C++:
// d3d9_hook.cpp
void CD3DHook::InitDevice()
{
    void** vTableIDirect3D9 = *(void***)(*(DWORD*)0xC97C20); // 0xC97C20 - стат. указатель на IDirect3D9
    VMTHookManager* vmtHookIDirect3D9 = new VMTHookManager(vTableIDirect3D9);
    orig_CreateDevice = (tCreateDevice)vmtHookIDirect3D9->Hook(16, (void*)myCreateDevice);
}

// main.cpp
void mainThread(PVOID)
{
    pD3DHook->InitDevice();
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
    {
        _beginthread(mainThread, NULL, NULL);
    }
    return TRUE;
}
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
4
Реакции[?]
0
Поинты[?]
0
А самим найти указатель на девайс, не?
Пропали краши/исключения в дебаггере. Но хук по прежнему не работает
C++:
void CD3DHook::InitDevice()
{
    LPDIRECT3D9 pD3D;
    while ((pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
        return;

    void** vTableIDirect3D9 = *(void***)(*(DWORD*)pD3D);
    VMTHookManager* vmtHookIDirect3D9 = new VMTHookManager(vTableIDirect3D9);
    orig_CreateDevice = (tCreateDevice)vmtHookIDirect3D9->Hook(16, (void*)myCreateDevice);
}
 
Начинающий
Статус
Оффлайн
Регистрация
5 Апр 2019
Сообщения
45
Реакции[?]
6
Поинты[?]
1K
Пропали краши/исключения в дебаггере. Но хук по прежнему не работает
C++:
void CD3DHook::InitDevice()
{
    LPDIRECT3D9 pD3D;
    while ((pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
        return;

    void** vTableIDirect3D9 = *(void***)(*(DWORD*)pD3D);
    VMTHookManager* vmtHookIDirect3D9 = new VMTHookManager(vTableIDirect3D9);
    orig_CreateDevice = (tCreateDevice)vmtHookIDirect3D9->Hook(16, (void*)myCreateDevice);
}
а зачем ты свой IDirect3D9 хукаешь а
 
Начинающий
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Хуки present / reset / endscene у меня есть,
createDevice это метод класса IDirect3D9 а не IDirect3DDevice9
 
Сверху Снизу