From 3e8f2e3fa58b5825cfb3a2dbcf4591a882ecf92b Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Tue, 5 Feb 2019 16:29:17 +0100 Subject: setupapi: Add support for driver info lists Signed-off-by: Simon Rozman --- setupapi/setupapi_windows_test.go | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'setupapi/setupapi_windows_test.go') diff --git a/setupapi/setupapi_windows_test.go b/setupapi/setupapi_windows_test.go index 93ae42a..12b5fe1 100644 --- a/setupapi/setupapi_windows_test.go +++ b/setupapi/setupapi_windows_test.go @@ -136,6 +136,69 @@ func TestSetupDiEnumDeviceInfo(t *testing.T) { } } +func TestDevInfo_BuildDriverInfoList(t *testing.T) { + devInfoList, err := SetupDiGetClassDevsEx(&deviceClassNetGUID, "", 0, DIGCF_PRESENT, DevInfo(0), "") + if err != nil { + t.Errorf("Error calling SetupDiGetClassDevsEx: %s", err.Error()) + } + defer devInfoList.Close() + + for i := 0; true; i++ { + deviceData, err := devInfoList.EnumDeviceInfo(i) + if err != nil { + if errWin, ok := err.(syscall.Errno); ok && errWin == 259 /*ERROR_NO_MORE_ITEMS*/ { + break + } + continue + } + + const driverType SPDIT = SPDIT_COMPATDRIVER + err = devInfoList.BuildDriverInfoList(deviceData, driverType) + if err != nil { + t.Errorf("Error calling SetupDiBuildDriverInfoList: %s", err.Error()) + } + defer devInfoList.DestroyDriverInfoList(deviceData, driverType) + + var selectedDriverData *SP_DRVINFO_DATA + for j := 0; true; j++ { + driverData, err := devInfoList.EnumDriverInfo(deviceData, driverType, j) + if err != nil { + if errWin, ok := err.(syscall.Errno); ok && errWin == 259 /*ERROR_NO_MORE_ITEMS*/ { + break + } + continue + } + + if driverData2, err2 := driverData.ToGo().ToWindows(); err2 != nil || *driverData2 != *driverData { + t.Error("Error converting between SP_DRVINFO_DATA and DrvInfoData") + } + + if driverData.DriverType == 0 { + continue + } + + err = devInfoList.SetSelectedDriver(deviceData, driverData) + if err != nil { + t.Errorf("Error calling SetupDiSetSelectedDriver: %s", err.Error()) + } else { + selectedDriverData = driverData + } + + _, err = devInfoList.GetDriverInfoDetail(deviceData, driverData) + if err != nil { + t.Errorf("Error calling SetupDiGetDriverInfoDetail: %s", err.Error()) + } + } + + selectedDriverData2, err := devInfoList.GetSelectedDriver(deviceData) + if err != nil { + t.Errorf("Error calling SetupDiGetSelectedDriver: %s", err.Error()) + } else if *selectedDriverData != *selectedDriverData2 { + t.Error("SetupDiGetSelectedDriver should return driver selected with SetupDiSetSelectedDriver") + } + } +} + func TestSetupDiGetClassDevsEx(t *testing.T) { devInfoList, err := SetupDiGetClassDevsEx(&deviceClassNetGUID, "PCI", 0, DIGCF_PRESENT, DevInfo(0), computerName) if err == nil { -- cgit v1.2.3