diff --git a/Windows/DinputDevice.cpp b/Windows/DinputDevice.cpp index 0c3775fb73..731d6b9698 100644 --- a/Windows/DinputDevice.cpp +++ b/Windows/DinputDevice.cpp @@ -37,6 +37,8 @@ #pragma comment(lib,"dinput8.lib") +using Microsoft::WRL::ComPtr; + // static members of DinputDevice unsigned int DinputDevice::pInstances = 0; Microsoft::WRL::ComPtr DinputDevice::pDI; @@ -315,27 +317,22 @@ size_t DinputDevice::getNumPads() static std::set DetectXInputVIDPIDs() { std::set xinputVidPids; - IWbemLocator* pIWbemLocator = nullptr; + ComPtr pIWbemLocator; if (FAILED(CoCreateInstance(__uuidof(WbemLocator), nullptr, CLSCTX_INPROC_SERVER, - __uuidof(IWbemLocator), (void**)&pIWbemLocator))) + IID_PPV_ARGS(&pIWbemLocator)))) return xinputVidPids; - IWbemServices* pIWbemServices = nullptr; + ComPtr pIWbemServices; if (FAILED(pIWbemLocator->ConnectServer(_bstr_t(L"root\\cimv2"), nullptr, nullptr, nullptr, 0, - nullptr, nullptr, &pIWbemServices))) { - pIWbemLocator->Release(); + nullptr, nullptr, &pIWbemServices))) return xinputVidPids; - } - CoSetProxyBlanket(pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, nullptr, + CoSetProxyBlanket(pIWbemServices.Get(), RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, nullptr, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, nullptr, EOAC_NONE); - IEnumWbemClassObject* pEnumDevices = nullptr; - if (FAILED(pIWbemServices->CreateInstanceEnum(_bstr_t(L"Win32_PNPEntity"), 0, nullptr, &pEnumDevices))) { - pIWbemServices->Release(); - pIWbemLocator->Release(); + ComPtr pEnumDevices; + if (FAILED(pIWbemServices->CreateInstanceEnum(_bstr_t(L"Win32_PNPEntity"), 0, nullptr, &pEnumDevices))) return xinputVidPids; - } IWbemClassObject* pDevices[32] = { 0 }; ULONG uReturned = 0; @@ -363,10 +360,6 @@ static std::set DetectXInputVIDPIDs() { } } - pEnumDevices->Release(); - pIWbemServices->Release(); - pIWbemLocator->Release(); - return xinputVidPids; }