Module: wine Branch: master Commit: cd6ee00cfd0f0fb5c47e36bdd00653d0b59ea2f8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=cd6ee00cfd0f0fb5c47e36bdd...
Author: Zebediah Figura z.figura12@gmail.com Date: Fri May 24 23:33:54 2019 -0500
setupapi: Process the .HW subsection in SetupDiInstallDevice().
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/setupapi/devinst.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 9d0cb99..9bedb73 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -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; }