]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
setupapi: Add DrvInfoDetailData.IsCompatible() to simplify HID detection
authorSimon Rozman <simon@rozman.si>
Wed, 6 Feb 2019 19:18:44 +0000 (20:18 +0100)
committerSimon Rozman <simon@rozman.si>
Wed, 6 Feb 2019 19:18:44 +0000 (20:18 +0100)
Signed-off-by: Simon Rozman <simon@rozman.si>
setupapi/setupapi_windows_test.go
setupapi/types_windows.go

index 9f45a6ff688b551c78a2894c856c472487d17ea0..2325164952eae17ec18fddf01bfc502425b94609 100644 (file)
@@ -206,10 +206,22 @@ func TestDevInfo_BuildDriverInfoList(t *testing.T) {
                                selectedDriverData = driverData
                        }
 
-                       _, err = devInfoList.GetDriverInfoDetail(deviceData, driverData)
+                       driverDetailData, err := devInfoList.GetDriverInfoDetail(deviceData, driverData)
                        if err != nil {
                                t.Errorf("Error calling SetupDiGetDriverInfoDetail: %s", err.Error())
                        }
+
+                       if driverDetailData.IsCompatible("foobar-aab6e3a4-144e-4786-88d3-6cec361e1edd") {
+                               t.Error("Invalid HWID compatibitlity reported")
+                       }
+                       if !driverDetailData.IsCompatible(strings.ToUpper(driverDetailData.HardwareID)) {
+                               t.Error("HWID compatibitlity missed")
+                       }
+                       for k := range driverDetailData.CompatIDs {
+                               if !driverDetailData.IsCompatible(strings.ToUpper(driverDetailData.CompatIDs[k])) {
+                                       t.Error("HWID compatibitlity missed")
+                               }
+                       }
                }
 
                selectedDriverData2, err := devInfoList.GetSelectedDriver(deviceData)
index 2dfcb7060cacdde88c3092c90079e26956d4b7aa..db2f8cec22502fa93f475fce7911ba08db9ce47f 100644 (file)
@@ -6,6 +6,7 @@
 package setupapi
 
 import (
+       "strings"
        "syscall"
        "unsafe"
 
@@ -447,6 +448,21 @@ type DrvInfoDetailData struct {
        CompatIDs      []string
 }
 
+// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list.
+func (DriverInfoDetailData DrvInfoDetailData) IsCompatible(hwid string) bool {
+       hwidLC := strings.ToLower(hwid)
+       if strings.ToLower(DriverInfoDetailData.HardwareID) == hwidLC {
+               return true
+       }
+       for i := range DriverInfoDetailData.CompatIDs {
+               if strings.ToLower(DriverInfoDetailData.CompatIDs[i]) == hwidLC {
+                       return true
+               }
+       }
+
+       return false
+}
+
 // DICD flags control SetupDiCreateDeviceInfo
 type DICD uint32