diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-10-28 15:09:04 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-10-29 21:09:26 +0200 |
commit | 539979e99b3c8cb42a0df163a5626c62cfcb6696 (patch) | |
tree | b853f7db4682d4139c69f8454c756f6ee781fe19 | |
parent | fetcher,winhttp: force TLS 1.2 on Win 8.0 and 7 (diff) | |
download | wireguard-windows-539979e99b3c8cb42a0df163a5626c62cfcb6696.tar.xz wireguard-windows-539979e99b3c8cb42a0df163a5626c62cfcb6696.zip |
manager: cleanup legacy wintun
It's not good to leave cruft around from the upgrade case when people
want to uninstall, so we remove wintun in the uninstaller manually
(without the help of wintun.dll, which we no longer ship). But also, so
that we can eventually drop that code, we also remove it
opportunistically when the manager starts.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | driver/wintunremoval_windows.go | 51 | ||||
-rw-r--r-- | go.mod | 8 | ||||
-rw-r--r-- | go.sum | 10 | ||||
-rw-r--r-- | main.go | 1 | ||||
-rw-r--r-- | manager/service.go | 2 |
5 files changed, 63 insertions, 9 deletions
diff --git a/driver/wintunremoval_windows.go b/driver/wintunremoval_windows.go new file mode 100644 index 00000000..f10f2549 --- /dev/null +++ b/driver/wintunremoval_windows.go @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2019-2021 WireGuard LLC. All Rights Reserved. + */ + +package driver + +import ( + "path/filepath" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/setupapi" +) + +func UninstallLegacyWintun() error { + var deviceClassNetGUID = &windows.GUID{0x4d36e972, 0xe325, 0x11ce, [8]byte{0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}} + devInfo, err := setupapi.SetupDiCreateDeviceInfoListEx(deviceClassNetGUID, 0, "") + if err != nil { + return err + } + defer devInfo.Close() + devInfoData, err := devInfo.CreateDeviceInfo("Wintun", deviceClassNetGUID, "", 0, setupapi.DICD_GENERATE_ID) + if err != nil { + return err + } + err = devInfo.SetDeviceRegistryProperty(devInfoData, setupapi.SPDRP_HARDWAREID, []byte("W\x00i\x00n\x00t\x00u\x00n\x00\x00\x00\x00\x00")) + if err != nil { + return err + } + err = devInfo.BuildDriverInfoList(devInfoData, setupapi.SPDIT_COMPATDRIVER) + if err != nil { + return err + } + defer devInfo.DestroyDriverInfoList(devInfoData, setupapi.SPDIT_COMPATDRIVER) + var lastError error + for i := 0; ; i++ { + drvInfoData, err := devInfo.EnumDriverInfo(devInfoData, setupapi.SPDIT_COMPATDRIVER, i) + if err != nil { + if err == windows.ERROR_NO_MORE_ITEMS { + break + } + continue + } + drvInfoDetailData, err := devInfo.DriverInfoDetail(devInfoData, drvInfoData) + if err != nil { + continue + } + lastError = setupapi.SetupUninstallOEMInf(filepath.Base(drvInfoDetailData.InfFileName()), 0) + } + return lastError +} @@ -6,9 +6,9 @@ require ( github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 github.com/lxn/win v0.0.0-20210218163916-a377121e959e golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 - golang.org/x/net v0.0.0-20211020060615-d418f374d309 - golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 - golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b + golang.org/x/net v0.0.0-20211029160332-540bb53d3b2e + golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 + golang.org/x/text v0.3.8-0.20211029042148-bb1c79828956 ) require ( @@ -20,5 +20,5 @@ require ( replace ( github.com/lxn/walk => golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd github.com/lxn/win => golang.zx2c4.com/wireguard/windows v0.0.0-20210224134948-620c54ef6199 - golang.org/x/sys => golang.zx2c4.com/wireguard/windows v0.0.0-20211026085405-4db69cf28188 + golang.org/x/sys => golang.zx2c4.com/wireguard/windows v0.0.0-20211029170807-5c05bdce0504 ) @@ -6,11 +6,11 @@ golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211029160332-540bb53d3b2e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b h1:NXqSWXSRUSCaFuvitrWtU169I3876zRTalMRbfd6LL0= -golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0= +golang.org/x/text v0.3.8-0.20211029042148-bb1c79828956 h1:xw/3G76i8BwoCoEZ8RzhVpFrHEz4Qm9D7zPckwa7KVM= +golang.org/x/text v0.3.8-0.20211029042148-bb1c79828956/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= @@ -22,5 +22,5 @@ golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd h1:kAUzMAI golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd/go.mod h1:Y+FYqVFaQO6a+1uigm0N0GiuaZrLEaBxEiJ8tfH9sMQ= golang.zx2c4.com/wireguard/windows v0.0.0-20210224134948-620c54ef6199 h1:ogXKLng/Myrt2odYTkleySGzQj/GWg9GV1AQ8P9NnU4= golang.zx2c4.com/wireguard/windows v0.0.0-20210224134948-620c54ef6199/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= -golang.zx2c4.com/wireguard/windows v0.0.0-20211026085405-4db69cf28188 h1:dn58scjvJtbJHUasC10DOLt+dgcwSOSB3AZU9YpvXS8= -golang.zx2c4.com/wireguard/windows v0.0.0-20211026085405-4db69cf28188/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.zx2c4.com/wireguard/windows v0.0.0-20211029170807-5c05bdce0504 h1:nieMJi73mSTXbdllDz6R7Es9QoYOry/q88v1F45ev4A= +golang.zx2c4.com/wireguard/windows v0.0.0-20211029170807-5c05bdce0504/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -318,6 +318,7 @@ func main() { if len(os.Args) != 2 { usage() } + _ = driver.UninstallLegacyWintun() // Best effort err := driver.Uninstall() if err != nil { fatal(err) diff --git a/manager/service.go b/manager/service.go index db03c3a8..ba59a20e 100644 --- a/manager/service.go +++ b/manager/service.go @@ -17,6 +17,7 @@ import ( "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" + "golang.zx2c4.com/wireguard/windows/driver" "golang.zx2c4.com/wireguard/windows/conf" "golang.zx2c4.com/wireguard/windows/elevate" @@ -259,6 +260,7 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest } go checkForUpdates() + go driver.UninstallLegacyWintun() // We uninstall opportunistically here, so that we don't have to carry around the uninstaller code forever. var sessionsPointer *windows.WTS_SESSION_INFO var count uint32 |