summaryrefslogtreecommitdiff
path: root/Source/Core/Common/CommonFuncs.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2025-06-15 15:44:31 -0500
committerGitHub <noreply@github.com>2025-06-15 15:44:31 -0500
commit3a94289ad6e27011fe0ca3ab0fb0fee771fb9fa8 (patch)
tree3a9803a91ed2408bdd041bc989561dc61bcdf57f /Source/Core/Common/CommonFuncs.cpp
parent2fb66e97087119715ada71c015f63c2decc97b2d (diff)
parentd93245cc7a2aaa232a57161cdde426a540f0d810 (diff)
Merge pull request #13744 from JoshuaVandaele/windows-specific-getdevicename
Host: Implement a Windows-only implementation of `GetDeviceNameFromVIDPID`
Diffstat (limited to 'Source/Core/Common/CommonFuncs.cpp')
-rw-r--r--Source/Core/Common/CommonFuncs.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/Source/Core/Common/CommonFuncs.cpp b/Source/Core/Common/CommonFuncs.cpp
index aff87a9258..f59939bf6b 100644
--- a/Source/Core/Common/CommonFuncs.cpp
+++ b/Source/Core/Common/CommonFuncs.cpp
@@ -10,6 +10,7 @@
#ifdef _WIN32
#include <windows.h>
+#include <SetupAPI.h>
#define strerror_r(err, buf, len) strerror_s(buf, len, err)
@@ -91,5 +92,28 @@ std::optional<std::wstring> GetModuleName(void* hInstance)
name.resize(size);
return name;
}
+
+std::wstring GetDeviceProperty(const HDEVINFO& device_info, const PSP_DEVINFO_DATA device_data,
+ const DEVPROPKEY* requested_property)
+{
+ DWORD required_size = 0;
+ DEVPROPTYPE device_property_type;
+ BOOL result;
+
+ result = SetupDiGetDeviceProperty(device_info, device_data, requested_property,
+ &device_property_type, nullptr, 0, &required_size, 0);
+ if (!result && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+ return std::wstring();
+
+ std::vector<TCHAR> unicode_buffer(required_size / sizeof(TCHAR));
+
+ result = SetupDiGetDeviceProperty(
+ device_info, device_data, requested_property, &device_property_type,
+ reinterpret_cast<PBYTE>(unicode_buffer.data()), required_size, nullptr, 0);
+ if (!result)
+ return std::wstring();
+
+ return std::wstring(unicode_buffer.data());
+}
#endif
} // namespace Common