golang.zx2c4.com/wireguard/windows@v0.5.4-0.20230123132234-dcc0eb72a04b/driver/wintunremoval_windows.go (about) 1 /* SPDX-License-Identifier: MIT 2 * 3 * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved. 4 */ 5 6 package driver 7 8 import ( 9 "path/filepath" 10 11 "golang.org/x/sys/windows" 12 ) 13 14 func UninstallLegacyWintun() error { 15 deviceClassNetGUID := &windows.GUID{0x4d36e972, 0xe325, 0x11ce, [8]byte{0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}} 16 devInfo, err := windows.SetupDiCreateDeviceInfoListEx(deviceClassNetGUID, 0, "") 17 if err != nil { 18 return err 19 } 20 defer devInfo.Close() 21 devInfoData, err := devInfo.CreateDeviceInfo("Wintun", deviceClassNetGUID, "", 0, windows.DICD_GENERATE_ID) 22 if err != nil { 23 return err 24 } 25 err = devInfo.SetDeviceRegistryProperty(devInfoData, windows.SPDRP_HARDWAREID, []byte("W\x00i\x00n\x00t\x00u\x00n\x00\x00\x00\x00\x00")) 26 if err != nil { 27 return err 28 } 29 err = devInfo.BuildDriverInfoList(devInfoData, windows.SPDIT_COMPATDRIVER) 30 if err != nil { 31 return err 32 } 33 defer devInfo.DestroyDriverInfoList(devInfoData, windows.SPDIT_COMPATDRIVER) 34 var lastError error 35 for i := 0; ; i++ { 36 drvInfoData, err := devInfo.EnumDriverInfo(devInfoData, windows.SPDIT_COMPATDRIVER, i) 37 if err != nil { 38 if err == windows.ERROR_NO_MORE_ITEMS { 39 break 40 } 41 continue 42 } 43 drvInfoDetailData, err := devInfo.DriverInfoDetail(devInfoData, drvInfoData) 44 if err != nil { 45 continue 46 } 47 lastError = windows.SetupUninstallOEMInf(filepath.Base(drvInfoDetailData.InfFileName()), 0) 48 } 49 return lastError 50 }