Esempio n. 1
0
BOOL FAR PASCAL HookDI::HookEnumCallbackW(LPCDIDEVICEINSTANCEW lpddi, LPVOID pvRef)
{
	if (!InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_DI)) return TrueCallbackW(lpddi, pvRef);
	PrintLog("EnumCallbackW");

	if (!DeviceCheck(lpddi)) return TrueCallbackW(lpddi, pvRef);

	if (InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_STOP)) return DIENUM_STOP;

	for (auto padcfg = InputHookManager::Get().GetInputHook().begin(); padcfg != InputHookManager::Get().GetInputHook().end(); ++padcfg)
	{
		if (IsEqualGUID(padcfg->GetProductGUID(), lpddi->guidProduct))
		{
			DIDEVICEINSTANCEW fakedev = *lpddi;
			if (InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_PIDVID))
			{
				std::wstring strTrueguidProduct;
				std::wstring strHookguidProduct;

				GUIDtoString(&strTrueguidProduct, fakedev.guidProduct);
				fakedev.guidProduct.Data1 = InputHookManager::Get().GetInputHook().GetFakePIDVID();
				GUIDtoString(&strHookguidProduct, fakedev.guidProduct);

				PrintLog("GUID change:");
				PrintLog("%ls", strTrueguidProduct.c_str());
				PrintLog("%ls", strHookguidProduct.c_str());
			}

			// This should not be required
			// fakedev.dwDevType = (MAKEWORD(DI8DEVTYPE_GAMEPAD, DI8DEVTYPEGAMEPAD_STANDARD) | DIDEVTYPE_HID); //66069 == 0x00010215
			// fakedev.wUsage = 0x05;
			// fakedev.wUsagePage = 0x01;

			if (InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_NAME))
			{
				std::wstring OldProductName(fakedev.tszProductName);
				std::wstring OldInstanceName(fakedev.tszInstanceName);

				wcscpy_s(fakedev.tszProductName, L"XBOX 360 For Windows (Controller)");
				wcscpy_s(fakedev.tszInstanceName, L"XBOX 360 For Windows (Controller)");

				PrintLog("Product Name change:");
				PrintLog("\"%ls\"", OldProductName.c_str());
				PrintLog("\"%ls\"", fakedev.tszProductName);

				PrintLog("Instance Name change:");
				PrintLog("\"%ls\"", OldInstanceName.c_str());
				PrintLog("\"%ls\"", fakedev.tszInstanceName);
			}

			return TrueCallbackW(&fakedev, pvRef);
		}
	}

	return TrueCallbackW(lpddi, pvRef);
}
Esempio n. 2
0
HRESULT STDMETHODCALLTYPE HookDI::HookGetDeviceInfoW(LPDIRECTINPUTDEVICE8W This, LPDIDEVICEINSTANCEW pdidi)
{
	HRESULT hr = TrueGetDeviceInfoW(This, pdidi);

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

	if (!DeviceCheck(pdidi)) return TrueGetDeviceInfoW(This, pdidi);

	for (auto padcfg = InputHookManager::Get().GetInputHook().begin(); padcfg != InputHookManager::Get().GetInputHook().end(); ++padcfg)
	{
		if (IsEqualGUID(padcfg->GetProductGUID(), pdidi->guidProduct))
		{
			if (InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_PIDVID))
			{
				std::wstring strTrueguidProduct;
				std::wstring strHookguidProduct;

				GUIDtoString(&strTrueguidProduct, pdidi->guidProduct);
				pdidi->guidProduct.Data1 = InputHookManager::Get().GetInputHook().GetFakePIDVID();
				GUIDtoString(&strHookguidProduct, pdidi->guidProduct);

				PrintLog("GUID change:");
				PrintLog("%ls", strTrueguidProduct.c_str());
				PrintLog("%ls", strHookguidProduct.c_str());
			}

			// This should not be required
			//pdidi->dwDevType = (MAKEWORD(DI8DEVTYPE_GAMEPAD, DI8DEVTYPEGAMEPAD_STANDARD) | DIDEVTYPE_HID); //66069 == 0x00010215
			//pdidi->wUsage = 0x05;
			//pdidi->wUsagePage = 0x01;

			if (InputHookManager::Get().GetInputHook().GetState(InputHook::HOOK_NAME))
			{
				std::wstring OldProductName(pdidi->tszProductName);
				std::wstring OldInstanceName(pdidi->tszInstanceName);

				wcscpy_s(pdidi->tszProductName, L"XBOX 360 For Windows (Controller)");
				wcscpy_s(pdidi->tszInstanceName, L"XBOX 360 For Windows (Controller)");

				PrintLog("Product Name change:");
				PrintLog("\"%ls\"", OldProductName.c_str());
				PrintLog("\"%ls\"", pdidi->tszProductName);

				PrintLog("Instance Name change:");
				PrintLog("\"%ls\"", OldInstanceName.c_str());
				PrintLog("\"%ls\"", pdidi->tszInstanceName);
			}
		}
	}

	return hr;
}
Esempio n. 3
0
HRESULT STDMETHODCALLTYPE HookGetDeviceInfoW (LPDIRECTINPUTDEVICE8W This, LPDIDEVICEINSTANCEW pdidi)
{
    HRESULT hr = oGetDeviceInfoW( This, pdidi );

    if(!iHookThis->GetState(iHook::HOOK_DI)) return hr;
    PrintLog(LOG_HOOKDI,"*GetDeviceInfoW*");

    if(hr != NO_ERROR) return hr;

    if(pdidi)
    {
        // Fast return if keyboard or mouse
        if (((pdidi->dwDevType & 0xFF) == DI8DEVTYPE_KEYBOARD))
        {
            PrintLog(LOG_HOOKDI,"Keyboard detected - skipping");
            return hr;
        }

        if (((pdidi->dwDevType & 0xFF) == DI8DEVTYPE_MOUSE))
        {
            PrintLog(LOG_HOOKDI,"Mouse detected - skipping");
            return hr;
        }

        for(auto padcfg = iHookThis->begin(); padcfg != iHookThis->end(); ++padcfg)
        {
            if(padcfg->GetHookState() && IsEqualGUID(padcfg->GetProductGUID(), pdidi->guidProduct))
            {
                if(iHookThis->GetState(iHook::HOOK_PIDVID))
                {
                    std::wstring strTrueguidProduct;
                    std::wstring strHookguidProduct;

                    strTrueguidProduct = GUIDtoStringW(pdidi->guidProduct);
                    pdidi->guidProduct.Data1 = iHookThis->GetFakePIDVID();
                    strHookguidProduct = GUIDtoStringW(pdidi->guidProduct);

                    PrintLog(LOG_HOOKDI,"%s","GUID change:");
                    PrintLog(LOG_HOOKDI,"%ls",strTrueguidProduct.c_str());
                    PrintLog(LOG_HOOKDI,"%ls",strHookguidProduct.c_str());
                }

                // This should not be required
                //pdidi->dwDevType = (MAKEWORD(DI8DEVTYPE_GAMEPAD, DI8DEVTYPEGAMEPAD_STANDARD) | DIDEVTYPE_HID); //66069 == 0x00010215
                //pdidi->wUsage = 0x05;
                //pdidi->wUsagePage = 0x01;

                if(iHookThis->GetState(iHook::HOOK_NAME))
                {
                    std::wstring OldProductName(pdidi->tszProductName);
                    std::wstring OldInstanceName(pdidi->tszInstanceName);

                    wcscpy_s(pdidi->tszProductName, L"XBOX 360 For Windows (Controller)");
                    wcscpy_s(pdidi->tszInstanceName, L"XBOX 360 For Windows (Controller)");

                    PrintLog(LOG_HOOKDI,"%s","Product Name change:");
                    PrintLog(LOG_HOOKDI,"\"%ls\"",OldProductName.c_str());
                    PrintLog(LOG_HOOKDI,"\"%ls\"",pdidi->tszProductName);

                    PrintLog(LOG_HOOKDI,"%s","Instance Name change:");
                    PrintLog(LOG_HOOKDI,"\"%ls\"",OldInstanceName.c_str());
                    PrintLog(LOG_HOOKDI,"\"%ls\"",pdidi->tszInstanceName);
                }

                hr=DI_OK;
            }
        }
    }

    return hr;
}
Esempio n. 4
0
BOOL FAR PASCAL HookEnumCallbackW( const DIDEVICEINSTANCEW* pInst,VOID* pContext )
{
    if(!iHookThis->GetState(iHook::HOOK_DI)) return lpTrueCallbackW(pInst,pContext);
    PrintLog(LOG_HOOKDI,"*EnumCallbackW*");

    // Fast return if keyboard or mouse
    if (((pInst->dwDevType & 0xFF) == DI8DEVTYPE_KEYBOARD))
    {
        PrintLog(LOG_HOOKDI,"Keyboard detected - skipping");
        return lpTrueCallbackW(pInst,pContext);
    }

    if (((pInst->dwDevType & 0xFF) == DI8DEVTYPE_MOUSE))
    {
        PrintLog(LOG_HOOKDI,"Mouse detected - skipping");
        return lpTrueCallbackW(pInst,pContext);
    }

    if(iHookThis->GetState(iHook::HOOK_STOP)) return DIENUM_STOP;

    if(pInst && pInst->dwSize == sizeof(DIDEVICEINSTANCEW))
    {
		for(auto padcfg = iHookThis->begin(); padcfg != iHookThis->end(); ++padcfg)
        {
            if(padcfg->GetHookState() && IsEqualGUID(padcfg->GetProductGUID(),pInst->guidProduct))
            {
                DIDEVICEINSTANCEW& HookInst = *(const_cast<DIDEVICEINSTANCEW*>(pInst));
                //DIDEVICEINSTANCEW HookInst;
                //memcpy(&HookInst,pInst,pInst->dwSize);

                if(iHookThis->GetState(iHook::HOOK_PIDVID))
                {
                    std::wstring strTrueguidProduct;
                    std::wstring strHookguidProduct;

                    strTrueguidProduct = GUIDtoStringW(HookInst.guidProduct);
                    HookInst.guidProduct.Data1 = iHookThis->GetFakePIDVID();
                    strHookguidProduct = GUIDtoStringW(HookInst.guidProduct);

                    PrintLog(LOG_HOOKDI,"%s","GUID change:");
                    PrintLog(LOG_HOOKDI,"%ls",strTrueguidProduct.c_str());
                    PrintLog(LOG_HOOKDI,"%ls",strHookguidProduct.c_str());
                }

                // This should not be required
                //HookInst.dwDevType = (MAKEWORD(DI8DEVTYPE_GAMEPAD, DI8DEVTYPEGAMEPAD_STANDARD) | DIDEVTYPE_HID); //66069 == 0x00010215
                //HookInst.wUsage = 0x05;
                //HookInst.wUsagePage = 0x01;

                if(iHookThis->GetState(iHook::HOOK_NAME))
                {
                    std::wstring OldProductName(HookInst.tszProductName);
                    std::wstring OldInstanceName(HookInst.tszInstanceName);

                    wcscpy_s(HookInst.tszProductName, L"XBOX 360 For Windows (Controller)");
                    wcscpy_s(HookInst.tszInstanceName, L"XBOX 360 For Windows (Controller)");

                    PrintLog(LOG_HOOKDI,"%s","Product Name change:");
                    PrintLog(LOG_HOOKDI,"\"%ls\"",OldProductName.c_str());
                    PrintLog(LOG_HOOKDI,"\"%ls\"",HookInst.tszProductName);

                    PrintLog(LOG_HOOKDI,"%s","Instance Name change:");
                    PrintLog(LOG_HOOKDI,"\"%ls\"",OldInstanceName.c_str());
                    PrintLog(LOG_HOOKDI,"\"%ls\"",HookInst.tszInstanceName);
                }

                return lpTrueCallbackW(&HookInst,pContext);
            }
        }
    }

    return lpTrueCallbackW(pInst,pContext);
}