[PATCH 8/9] setupapi: support DeviceID as enumerator

Donat Enikeev donat at enikeev.net
Mon Apr 24 15:52:33 CDT 2017


Based on staging patches from: Michael Muller <michael at fds-team.de> and Sebastian Lackner <sebastian at fds-team.de>

Signed-off-by: Donat Enikeev <donat at enikeev.net>
---
 dlls/setupapi/devinst.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 3f56a0c..312f364 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -2375,8 +2375,31 @@ static void SETUPDI_EnumerateDevices(HDEVINFO DeviceInfoSet, const GUID *class,
                     &enumStrKey);
             if (!l)
             {
-                SETUPDI_EnumerateMatchingDevices(DeviceInfoSet, enumstr,
+
+                WCHAR *enumerator, *device;
+                HKEY devKey;
+
+                if (!strchrW(enumstr, '\\'))
+                {
+                    SETUPDI_EnumerateMatchingDevices(DeviceInfoSet, enumstr,
                         enumStrKey, class, flags);
+                }
+                else if ((enumerator = strdupW(enumstr)))
+                {
+                    /* Both enumerator and device provided, enumerating instances */
+                    device = strchrW(enumerator, '\\');
+                    *device++ = 0;
+
+                    l = RegOpenKeyExW(enumKey, enumstr, 0, KEY_READ, &devKey);
+                    if (!l)
+                    {
+                        SETUPDI_EnumerateMatchingDeviceInstances(DeviceInfoSet, enumerator, device,
+                                                                devKey, class, flags);
+                        RegCloseKey(devKey);
+                    }
+
+                    HeapFree(GetProcessHeap(), 0, enumerator);
+                }
                 RegCloseKey(enumStrKey);
             }
         }
-- 
2.7.4




More information about the wine-patches mailing list