]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
wintun: set DI_QUIETINSTALL flag for GUI-less device management
authorSimon Rozman <simon@rozman.si>
Tue, 4 Jun 2019 11:57:36 +0000 (13:57 +0200)
committerSimon Rozman <simon@rozman.si>
Tue, 4 Jun 2019 12:45:23 +0000 (14:45 +0200)
Signed-off-by: Simon Rozman <simon@rozman.si>
tun/wintun/wintun_windows.go

index 7b99a5006a427c1e66c9450dcdf0d60603a85723..9dc4030d75bff3767b99656feb872b3ffce95dbb 100644 (file)
@@ -206,6 +206,13 @@ func CreateInterface(description string, hwndParent uintptr) (*Wintun, bool, err
                return nil, false, fmt.Errorf("SetupDiCreateDeviceInfo failed: %v", err)
        }
 
+       if hwndParent == 0 {
+               err = setQuietInstall(devInfoList, deviceData)
+               if err != nil {
+                       return nil, false, fmt.Errorf("Setting quiet installation failed: %v", err)
+               }
+       }
+
        // Set a device information element as the selected member of a device information set.
        err = devInfoList.SetSelectedDevice(deviceData)
        if err != nil {
@@ -441,6 +448,13 @@ func (wintun *Wintun) DeleteInterface(hwndParent uintptr) (bool, bool, error) {
                }
 
                if wintun.cfgInstanceID == wintun2.cfgInstanceID {
+                       if hwndParent == 0 {
+                               err = setQuietInstall(devInfoList, deviceData)
+                               if err != nil {
+                                       return false, false, fmt.Errorf("Setting quiet installation failed: %v", err)
+                               }
+                       }
+
                        // Remove the device.
                        removeDeviceParams := setupapi.RemoveDeviceParams{
                                ClassInstallHeader: *setupapi.MakeClassInstallHeader(setupapi.DIF_REMOVE),
@@ -480,11 +494,20 @@ func checkReboot(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInf
                return false, err
        }
 
-       if (devInstallParams.Flags & (setupapi.DI_NEEDREBOOT | setupapi.DI_NEEDRESTART)) != 0 {
-               return true, nil
+       return (devInstallParams.Flags & (setupapi.DI_NEEDREBOOT | setupapi.DI_NEEDRESTART)) != 0, nil
+}
+
+//
+// setQuietInstall sets device install parameters for a quiet installation
+//
+func setQuietInstall(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfoData) error {
+       devInstallParams, err := deviceInfoSet.DeviceInstallParams(deviceInfoData)
+       if err != nil {
+               return err
        }
 
-       return false, nil
+       devInstallParams.Flags |= setupapi.DI_QUIETINSTALL
+       return deviceInfoSet.SetDeviceInstallParams(deviceInfoData, devInstallParams)
 }
 
 //