Ejemplo n.º 1
0
HRESULT WINAPI HookDI::HookDirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter)
{
	HRESULT hr = TrueDirectInput8Create(hinst, dwVersion, riidltf, ppvOut, punkOuter);

	if (!InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_DI)) return hr;
	PrintLog("DirectInput8Create");

	if (hr != DI_OK) return hr;

	InputHookManager::Get().GetInputHook().StartTimeoutThread();

	if (IsEqualIID(riidltf, IID_IDirectInput8A))
	{
		LPDIRECTINPUT8A pDIA = static_cast<LPDIRECTINPUT8A>(*ppvOut);

		if (pDIA)
		{
			PrintLog("DirectInput8Create - ANSI interface");
			if (pDIA->lpVtbl->CreateDevice)
			{
				CreateDeviceA = pDIA->lpVtbl->CreateDevice;
				IH_CreateHook(CreateDeviceA, HookCreateDeviceA, &TrueCreateDeviceA);
				IH_EnableHook(CreateDeviceA);
			}
			if (pDIA->lpVtbl->EnumDevices)
			{
				EnumDevicesA = pDIA->lpVtbl->EnumDevices;
				IH_CreateHook(EnumDevicesA, HookEnumDevicesA, &TrueEnumDevicesA);
				IH_EnableHook(EnumDevicesA);
			}
		}
	}
	else if (IsEqualIID(riidltf, IID_IDirectInput8W))
	{
		LPDIRECTINPUT8W pDIW = static_cast<LPDIRECTINPUT8W>(*ppvOut);

		if (pDIW)
		{
			PrintLog("DirectInput8Create - UNICODE interface");
			if (pDIW->lpVtbl->CreateDevice)
			{
				CreateDeviceW = pDIW->lpVtbl->CreateDevice;
				IH_CreateHook(CreateDeviceW, HookCreateDeviceW, &TrueCreateDeviceW);
				IH_EnableHook(CreateDeviceW);
			}
			if (pDIW->lpVtbl->EnumDevices)
			{
				EnumDevicesW = pDIW->lpVtbl->EnumDevices;
				IH_CreateHook(EnumDevicesW, HookEnumDevicesW, &TrueEnumDevicesW);
				IH_EnableHook(EnumDevicesW);
			}
		}
	}

	return hr;
}
Ejemplo n.º 2
0
GENERATE_INTERCEPT_HEADER(DirectInput8Create, HRESULT, WINAPI, HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID * ppvOut, LPUNKNOWN punkOuter) {
	SDLOG(0, "DetouredDirectInput8Create!\n");
	return TrueDirectInput8Create(hinst, dwVersion, riidltf, ppvOut, punkOuter);
}