-
Автор темы
- #1
курсор лочится нормально,но при обратном локе сразу краш(раньше вообще просто картинка зависала)
"VGUI_Surface031"); - iSurface
hkLockCursor = 67;
мои хуки -
хук локКурсора -
вообще хз что делать, уже все перепробовал. Дебаг вообще странно себя ведет. он крашится еще на паттерн скане для хука энд сцены(она норм хукается и отрисовывается, так же, как и ресет)
C++:
ISurface* g_VGuiSurface = utl->get_interface<ISurface>(utl->get_module_factory(GetModuleHandleW(L"vguimatsurface.dll")),
Код:
vmt->init(g_VGuiSurface);
vmt->hook(hkLockCursor, index::LockCursor);
мои хуки -
Код:
void VmtManager::init(void* className)
{
count = 0;
base = nullptr;
_new = nullptr;
_orig = nullptr;
base = (DWORD**)className;//с класса в неподписанный массив указателей (DWORD, DWORD* - massiv; DWORD** - pointers massive;
do {
count++;
} while (reinterpret_cast<uintptr_t*>(*base)[count] != NULL);//ПОДСЧЕТ ФУНКЦИЙ, ЕСЛИ ФУНКЦИЯ == 0 - это неправильный индекс
_orig = (uintptr_t*)*base;// оригинал всего класса
_new = new DWORD[sizeof(DWORD) * count];//создание контейнера в блока памяти, равному всему классу бейс.
memcpy(_new, _orig, sizeof(DWORD) * count);
}
void VmtManager::hook(void* hkFuncName, int index)
{
DWORD old;
VirtualProtect(base, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &old);
_new[index] = (uintptr_t)(hkFuncName);
*base = _new;
VirtualProtect(base, sizeof(DWORD), old, &old);
}
Код:
long __stdcall hkLockCursor(void* _this)
{
static bool initCheck = false;
static auto hkLockCursorOrig = vmt->originalFunc<decltype(&hkLockCursor)>(index::LockCursor);//orig func
if (booleans::initMenu)
{
initCheck = true;
g_VGuiSurface->UnlockCursor();
// sFunc.g_InputSystem->ResetInputState();
}
else
{
if (initCheck)
{
return hkLockCursorOrig(g_VGuiSurface);
}
}
}
вообще хз что делать, уже все перепробовал. Дебаг вообще странно себя ведет. он крашится еще на паттерн скане для хука энд сцены(она норм хукается и отрисовывается, так же, как и ресет)