setupapi: Process the .HW subsection in SetupDiInstallDevice().

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Zebediah Figura 2019-05-24 23:33:54 -05:00 committed by Alexandre Julliard
parent d4c18c89d5
commit cd6ee00cfd
1 changed files with 19 additions and 2 deletions

View File

@ -4687,12 +4687,13 @@ BOOL WINAPI SetupDiInstallDevice(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data)
static const WCHAR infpathW[] = {'I','n','f','P','a','t','h',0};
static const WCHAR infsectionW[] = {'I','n','f','S','e','c','t','i','o','n',0};
static const WCHAR infsectionextW[] = {'I','n','f','S','e','c','t','i','o','n','E','x','t',0};
WCHAR section[LINE_LEN], section_ext[LINE_LEN], inf_path[MAX_PATH], *extptr, *filepart;
static const WCHAR dothwW[] = {'.','H','W',0};
WCHAR section[LINE_LEN], section_ext[LINE_LEN], subsection[LINE_LEN], inf_path[MAX_PATH], *extptr, *filepart;
UINT install_flags = SPINST_ALL;
HKEY driver_key, device_key;
struct device *device;
struct driver *driver;
void *callback_ctx;
HKEY driver_key;
INFCONTEXT ctx;
HINF hinf;
LONG l;
@ -4723,6 +4724,15 @@ BOOL WINAPI SetupDiInstallDevice(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data)
return FALSE;
}
if ((l = RegCreateKeyExW(device->key, DeviceParameters, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &device_key, NULL)))
{
SetLastError(l);
RegCloseKey(driver_key);
SetupCloseInfFile(hinf);
return FALSE;
}
if (device->params.Flags & DI_NOFILECOPY)
install_flags &= ~SPINST_FILES;
@ -4731,6 +4741,12 @@ BOOL WINAPI SetupDiInstallDevice(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data)
SetupInstallFromInfSectionW(NULL, hinf, section_ext, install_flags, driver_key, NULL,
SP_COPY_NEWER_ONLY, SetupDefaultQueueCallbackW, callback_ctx, NULL, NULL);
strcpyW(subsection, section_ext);
strcatW(subsection, dothwW);
SetupInstallFromInfSectionW(NULL, hinf, subsection, install_flags, device_key, NULL,
SP_COPY_NEWER_ONLY, SetupDefaultQueueCallbackW, callback_ctx, NULL, NULL);
SetupTermDefaultQueueCallback(callback_ctx);
SetupCloseInfFile(hinf);
@ -4742,6 +4758,7 @@ BOOL WINAPI SetupDiInstallDevice(HDEVINFO devinfo, SP_DEVINFO_DATA *device_data)
if (extptr)
RegSetValueExW(driver_key, infsectionextW, 0, REG_SZ, (BYTE *)extptr, strlenW(extptr) * sizeof(WCHAR));
RegCloseKey(device_key);
RegCloseKey(driver_key);
return TRUE;
}