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

Alexandre Julliard julliard at winehq.org
Mon May 27 14:50:19 CDT 2019


Module: wine
Branch: master
Commit: cd6ee00cfd0f0fb5c47e36bdd00653d0b59ea2f8
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=cd6ee00cfd0f0fb5c47e36bdd00653d0b59ea2f8

Author: Zebediah Figura <z.figura12 at 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 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
 }




More information about the wine-cvs mailing list