setupapi: Add DrvInfoDetailData.IsCompatible() to simplify HID detection

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2019-02-06 20:18:44 +01:00
parent 069016bbc4
commit 73df1c0871
2 changed files with 29 additions and 1 deletions

View File

@ -206,10 +206,22 @@ func TestDevInfo_BuildDriverInfoList(t *testing.T) {
selectedDriverData = driverData selectedDriverData = driverData
} }
_, err = devInfoList.GetDriverInfoDetail(deviceData, driverData) driverDetailData, err := devInfoList.GetDriverInfoDetail(deviceData, driverData)
if err != nil { if err != nil {
t.Errorf("Error calling SetupDiGetDriverInfoDetail: %s", err.Error()) 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) selectedDriverData2, err := devInfoList.GetSelectedDriver(deviceData)

View File

@ -6,6 +6,7 @@
package setupapi package setupapi
import ( import (
"strings"
"syscall" "syscall"
"unsafe" "unsafe"
@ -447,6 +448,21 @@ type DrvInfoDetailData struct {
CompatIDs []string 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 // DICD flags control SetupDiCreateDeviceInfo
type DICD uint32 type DICD uint32