Remove outdated and not used WIN_IsXInputDevice code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
diff --git a/src/joystick/windows/SDL_dinputjoystick.c b/src/joystick/windows/SDL_dinputjoystick.c
index 4c934a2..98f4aaf 100644
--- a/src/joystick/windows/SDL_dinputjoystick.c
+++ b/src/joystick/windows/SDL_dinputjoystick.c
@@ -235,144 +235,6 @@ SetDIerror(const char *function, HRESULT code)
return SDL_SetError("%s() DirectX error 0x%8.8lx", function, code);
}
-#if 0 /* Microsoft recommended implementation, but slower than checking raw devices */
-#define COBJMACROS
-#include <wbemidl.h>
-#include <oleauto.h>
-
-static const IID CLSID_WbemLocator = { 0x4590f811, 0x1d3a, 0x11d0,{ 0x89, 0x1f, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24 } };
-static const IID IID_IWbemLocator = { 0xdc12a687, 0x737f, 0x11cf,{ 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24 } };
-
-static SDL_bool
-WIN_IsXInputDevice(const TCHAR *name, const GUID* pGuidProductFromDirectInput)
-{
- IWbemLocator* pIWbemLocator = NULL;
- IEnumWbemClassObject* pEnumDevices = NULL;
- IWbemClassObject* pDevices[20];
- IWbemServices* pIWbemServices = NULL;
- BSTR bstrNamespace = NULL;
- BSTR bstrDeviceID = NULL;
- BSTR bstrClassName = NULL;
- DWORD uReturned = 0;
- SDL_bool bIsXinputDevice = SDL_FALSE;
- UINT iDevice = 0;
- VARIANT var;
- HRESULT hr;
-
- if (!SDL_XINPUT_Enabled()) {
- return SDL_FALSE;
- }
-
- if (SDL_tcsstr(name, TEXT(" XINPUT ")) != NULL) {
- /* This is a duplicate interface for a controller that will show up with XInput,
- e.g. Xbox One Elite Series 2 in Bluetooth mode.
- */
- return SDL_TRUE;
- }
-
- SDL_zeroa(pDevices);
-
- // Create WMI
- hr = CoCreateInstance(&CLSID_WbemLocator,
- NULL,
- CLSCTX_INPROC_SERVER,
- &IID_IWbemLocator,
- (LPVOID*)&pIWbemLocator);
- if (FAILED(hr) || pIWbemLocator == NULL)
- goto LCleanup;
-
- bstrNamespace = SysAllocString(L"\\\\.\\root\\cimv2"); if (bstrNamespace == NULL) goto LCleanup;
- bstrClassName = SysAllocString(L"Win32_PNPEntity"); if (bstrClassName == NULL) goto LCleanup;
- bstrDeviceID = SysAllocString(L"DeviceID"); if (bstrDeviceID == NULL) goto LCleanup;
-
- // Connect to WMI
- hr = IWbemLocator_ConnectServer(pIWbemLocator, bstrNamespace, NULL, NULL, 0L,
- 0L, NULL, NULL, &pIWbemServices);
- if (FAILED(hr) || pIWbemServices == NULL) {
- goto LCleanup;
- }
-
- // Switch security level to IMPERSONATE.
- CoSetProxyBlanket((IUnknown *)pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
- RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
-
- hr = IWbemServices_CreateInstanceEnum(pIWbemServices, bstrClassName, 0, NULL, &pEnumDevices);
- if (FAILED(hr) || pEnumDevices == NULL)
- goto LCleanup;
-
- // Loop over all devices
- for (;;) {
- // Get 20 at a time
- hr = IEnumWbemClassObject_Next(pEnumDevices, 10000, SDL_arraysize(pDevices), pDevices, &uReturned);
- if (FAILED(hr)) {
- goto LCleanup;
- }
- if (uReturned == 0) {
- break;
- }
-
- for (iDevice = 0; iDevice < uReturned; iDevice++) {
- // For each device, get its device ID
- hr = IWbemClassObject_Get(pDevices[iDevice], bstrDeviceID, 0L, &var, NULL, NULL);
- if (SUCCEEDED(hr) && var.vt == VT_BSTR && var.bstrVal != NULL) {
- // Check if the device ID contains "IG_". If it does, then it's an XInput device
- // This information can not be found from DirectInput
- if (SDL_wcsstr(var.bstrVal, L"IG_")) {
- char *bstrVal = WIN_StringToUTF8W(var.bstrVal);
-
- // If it does, then get the VID/PID from var.bstrVal
- DWORD dwPid = 0, dwVid = 0, dwVidPid;
- const char *strVid, *strPid;
- strVid = SDL_strstr(bstrVal, "VID_");
- if (strVid && SDL_sscanf(strVid, "VID_%4X", &dwVid) != 1)
- dwVid = 0;
- strPid = SDL_strstr(bstrVal, "PID_");
- if (strPid && SDL_sscanf(strPid, "PID_%4X", &dwPid) != 1)
- dwPid = 0;
-
- SDL_free(bstrVal);
-
- // Compare the VID/PID to the DInput device
- dwVidPid = MAKELONG(dwVid, dwPid);
- if (dwVidPid == pGuidProductFromDirectInput->Data1) {
- bIsXinputDevice = SDL_TRUE;
- goto LCleanup;
- }
- }
- }
- IWbemClassObject_Release(pDevices[iDevice]);
- }
- }
-
-LCleanup:
- if (bstrNamespace) {
- SysFreeString(bstrNamespace);
- }
- if (bstrDeviceID) {
- SysFreeString(bstrDeviceID);
- }
- if (bstrClassName) {
- SysFreeString(bstrClassName);
- }
- for (iDevice = 0; iDevice < SDL_arraysize(pDevices); iDevice++) {
- if (pDevices[iDevice]) {
- IWbemClassObject_Release(pDevices[iDevice]);
- }
- }
- if (pEnumDevices) {
- IEnumWbemClassObject_Release(pEnumDevices);
- }
- if (pIWbemLocator) {
- IWbemLocator_Release(pIWbemLocator);
- }
- if (pIWbemServices) {
- IWbemServices_Release(pIWbemServices);
- }
-
- return bIsXinputDevice;
-}
-#endif /* 0 */
-
static SDL_bool
SDL_IsXInputDevice(const TCHAR *name, const GUID* pGuidProductFromDirectInput)
{