From de08785aded3e7eb803b35510ea82cc033f19c24 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 22 Sep 2018 14:43:43 +0200 Subject: [PATCH] [SETUPAPI] SetupDiCreateDevRegKeyW / SetupDiOpenDevRegKey: Create or open the 'Device Parameters' subkey of the given devices enum key when we try to access its hardware key. This creates the PortName value in the proper location for serial ports. --- dll/win32/setupapi/devinst.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/dll/win32/setupapi/devinst.c b/dll/win32/setupapi/devinst.c index 73990f59520..91356c3f543 100644 --- a/dll/win32/setupapi/devinst.c +++ b/dll/win32/setupapi/devinst.c @@ -1515,6 +1515,27 @@ HKEY WINAPI SetupDiCreateDevRegKeyW( SetLastError(rc); goto cleanup; } + + if (Scope == DICS_FLAG_GLOBAL) + { + HKEY hTempKey = hKey; + + rc = RegCreateKeyExW(hTempKey, + L"Device Parameters", + 0, + NULL, + REG_OPTION_NON_VOLATILE, +#if _WIN32_WINNT >= 0x502 + KEY_READ | KEY_WRITE, +#else + KEY_ALL_ACCESS, +#endif + NULL, + &hKey, + NULL); + if (rc == ERROR_SUCCESS) + RegCloseKey(hTempKey); + } } else /* KeyType == DIREG_DRV */ { @@ -5905,6 +5926,18 @@ HKEY WINAPI SetupDiOpenDevRegKey( { case DIREG_DEV: key = SETUPDI_OpenDevKey(RootKey, devInfo, samDesired); + if (Scope == DICS_FLAG_GLOBAL) + { + LONG rc; + HKEY hTempKey = key; + rc = RegOpenKeyExW(hTempKey, + L"Device Parameters", + 0, + samDesired, + &key); + if (rc == ERROR_SUCCESS) + RegCloseKey(hTempKey); + } break; case DIREG_DRV: key = SETUPDI_OpenDrvKey(RootKey, devInfo, samDesired);