From 6d8b68c8f3cd7c9e9560c23e5f20e3ec4bc4fb6e Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 6 Jun 2019 22:28:13 +0200 Subject: [PATCH] wintun: guid functions are upstream --- go.mod | 2 +- go.sum | 4 +- tun/wintun/guid/guid_windows.go | 41 --------------- tun/wintun/guid/mksyscall.go | 8 --- tun/wintun/guid/zguid_windows.go | 55 -------------------- tun/wintun/setupapi/setupapi_windows_test.go | 5 +- tun/wintun/wintun_windows.go | 19 ++++--- 7 files changed, 14 insertions(+), 120 deletions(-) delete mode 100644 tun/wintun/guid/guid_windows.go delete mode 100644 tun/wintun/guid/mksyscall.go delete mode 100644 tun/wintun/guid/zguid_windows.go diff --git a/go.mod b/go.mod index 997071a..64042c9 100644 --- a/go.mod +++ b/go.mod @@ -5,5 +5,5 @@ go 1.12 require ( golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f golang.org/x/net v0.0.0-20190522155817-f3200d17e092 - golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5 + golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444 ) diff --git a/go.sum b/go.sum index eea48be..c645ad2 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,6 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgP golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5 h1:f005F/Jl5JLP036x7QIvUVhNTqxvSYwFIiyOh2q12iU= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444 h1:/d2cWp6PSamH4jDPFLyO150psQdqvtoNX8Zjg3AQ31g= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/tun/wintun/guid/guid_windows.go b/tun/wintun/guid/guid_windows.go deleted file mode 100644 index cc476d9..0000000 --- a/tun/wintun/guid/guid_windows.go +++ /dev/null @@ -1,41 +0,0 @@ -/* SPDX-License-Identifier: MIT - * - * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. - */ - -package guid - -import ( - "fmt" - "syscall" - - "golang.org/x/sys/windows" -) - -//sys clsidFromString(lpsz *uint16, pclsid *windows.GUID) (err error) [failretval!=0] = ole32.CLSIDFromString - -// -// FromString parses "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" string to GUID. -// -func FromString(str string) (*windows.GUID, error) { - strUTF16, err := syscall.UTF16PtrFromString(str) - if err != nil { - return nil, err - } - guid := &windows.GUID{} - err = clsidFromString(strUTF16, guid) - if err != nil { - return nil, err - } - return guid, nil -} - -// -// ToString function converts GUID to string -// "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}". -// -// The resulting string is uppercase. -// -func ToString(guid *windows.GUID) string { - return fmt.Sprintf("{%08X-%04X-%04X-%04X-%012X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[:2], guid.Data4[2:]) -} diff --git a/tun/wintun/guid/mksyscall.go b/tun/wintun/guid/mksyscall.go deleted file mode 100644 index 5c956cf..0000000 --- a/tun/wintun/guid/mksyscall.go +++ /dev/null @@ -1,8 +0,0 @@ -/* SPDX-License-Identifier: MIT - * - * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. - */ - -package guid - -//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zguid_windows.go guid_windows.go diff --git a/tun/wintun/guid/zguid_windows.go b/tun/wintun/guid/zguid_windows.go deleted file mode 100644 index b0b4cce..0000000 --- a/tun/wintun/guid/zguid_windows.go +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by 'go generate'; DO NOT EDIT. - -package guid - -import ( - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return nil - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) - return e -} - -var ( - modole32 = windows.NewLazySystemDLL("ole32.dll") - - procCLSIDFromString = modole32.NewProc("CLSIDFromString") -) - -func clsidFromString(lpsz *uint16, pclsid *windows.GUID) (err error) { - r1, _, e1 := syscall.Syscall(procCLSIDFromString.Addr(), 2, uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)), 0) - if r1 != 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} diff --git a/tun/wintun/setupapi/setupapi_windows_test.go b/tun/wintun/setupapi/setupapi_windows_test.go index a2edab8..b932d7d 100644 --- a/tun/wintun/setupapi/setupapi_windows_test.go +++ b/tun/wintun/setupapi/setupapi_windows_test.go @@ -11,7 +11,6 @@ import ( "testing" "golang.org/x/sys/windows" - "golang.zx2c4.com/wireguard/tun/wintun/guid" ) var deviceClassNetGUID = windows.GUID{Data1: 0x4d36e972, Data2: 0xe325, Data3: 0x11ce, Data4: [8]byte{0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}} @@ -323,10 +322,10 @@ func TestSetupDiGetDeviceRegistryProperty(t *testing.T) { } else if valStr, ok := val.(string); !ok { t.Errorf("SetupDiGetDeviceRegistryProperty(SPDRP_CLASSGUID) should return string") } else { - classGUID, err := guid.FromString(valStr) + classGUID, err := windows.GUIDFromString(valStr) if err != nil { t.Errorf("Error parsing GUID returned by SetupDiGetDeviceRegistryProperty(SPDRP_CLASSGUID): %s", err.Error()) - } else if *classGUID != deviceClassNetGUID { + } else if classGUID != deviceClassNetGUID { t.Errorf("SetupDiGetDeviceRegistryProperty(SPDRP_CLASSGUID) should return %x", deviceClassNetGUID) } } diff --git a/tun/wintun/wintun_windows.go b/tun/wintun/wintun_windows.go index 3d41f38..ac811af 100644 --- a/tun/wintun/wintun_windows.go +++ b/tun/wintun/wintun_windows.go @@ -15,7 +15,6 @@ import ( "golang.org/x/sys/windows" "golang.org/x/sys/windows/registry" - "golang.zx2c4.com/wireguard/tun/wintun/guid" "golang.zx2c4.com/wireguard/tun/wintun/netshell" registryEx "golang.zx2c4.com/wireguard/tun/wintun/registry" "golang.zx2c4.com/wireguard/tun/wintun/setupapi" @@ -54,8 +53,8 @@ func makeWintun(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfo return nil, fmt.Errorf("RegQueryStringValue(\"NetCfgInstanceId\") failed: %v", err) } - // Convert to windows.GUID. - ifid, err := guid.FromString(valueStr) + // Convert to GUID. + ifid, err := windows.GUIDFromString(valueStr) if err != nil { return nil, fmt.Errorf("NetCfgInstanceId registry value is not a GUID (expected: \"{...}\", provided: %q)", valueStr) } @@ -73,7 +72,7 @@ func makeWintun(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfo } return &Wintun{ - cfgInstanceID: *ifid, + cfgInstanceID: ifid, luidIndex: uint32(luidIdx), ifType: uint32(ifType), }, nil @@ -96,7 +95,7 @@ func GetInterface(ifname string, hwndParent uintptr) (*Wintun, error) { // Create a list of network devices. devInfoList, err := setupapi.SetupDiGetClassDevsEx(&deviceClassNetGUID, enumerator, hwndParent, setupapi.DIGCF_PRESENT, setupapi.DevInfo(0), machineName) if err != nil { - return nil, fmt.Errorf("SetupDiGetClassDevsEx(%s) failed: %v", guid.ToString(&deviceClassNetGUID), err) + return nil, fmt.Errorf("SetupDiGetClassDevsEx(%v) failed: %v", deviceClassNetGUID, err) } defer devInfoList.Close() @@ -189,14 +188,14 @@ func CreateInterface(description string, hwndParent uintptr) (*Wintun, bool, err // Create an empty device info set for network adapter device class. devInfoList, err := setupapi.SetupDiCreateDeviceInfoListEx(&deviceClassNetGUID, hwndParent, machineName) if err != nil { - return nil, false, fmt.Errorf("SetupDiCreateDeviceInfoListEx(%s) failed: %v", guid.ToString(&deviceClassNetGUID), err) + return nil, false, fmt.Errorf("SetupDiCreateDeviceInfoListEx(%v) failed: %v", deviceClassNetGUID, err) } defer devInfoList.Close() // Get the device class name from GUID. className, err := setupapi.SetupDiClassNameFromGuidEx(&deviceClassNetGUID, machineName) if err != nil { - return nil, false, fmt.Errorf("SetupDiClassNameFromGuidEx(%s) failed: %v", guid.ToString(&deviceClassNetGUID), err) + return nil, false, fmt.Errorf("SetupDiClassNameFromGuidEx(%v) failed: %v", deviceClassNetGUID, err) } // Create a new device info element and add it to the device info set. @@ -516,14 +515,14 @@ func (wintun *Wintun) SetInterfaceName(ifname string) error { // netRegKeyName returns interface-specific network registry key name. // func (wintun *Wintun) netRegKeyName() string { - return fmt.Sprintf("SYSTEM\\CurrentControlSet\\Control\\Network\\%s\\%s\\Connection", guid.ToString(&deviceClassNetGUID), guid.ToString(&wintun.cfgInstanceID)) + return fmt.Sprintf("SYSTEM\\CurrentControlSet\\Control\\Network\\%v\\%v\\Connection", deviceClassNetGUID, wintun.cfgInstanceID) } // // tcpipAdapterRegKeyName returns adapter-specific TCP/IP network registry key name. // func (wintun *Wintun) tcpipAdapterRegKeyName() string { - return fmt.Sprintf("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Adapters\\%s", guid.ToString(&wintun.cfgInstanceID)) + return fmt.Sprintf("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Adapters\\%v", wintun.cfgInstanceID) } // @@ -558,7 +557,7 @@ func (wintun *Wintun) deviceData(hwndParent uintptr) (setupapi.DevInfo, *setupap // Create a list of network devices. devInfoList, err := setupapi.SetupDiGetClassDevsEx(&deviceClassNetGUID, enumerator, hwndParent, setupapi.DIGCF_PRESENT, setupapi.DevInfo(0), machineName) if err != nil { - return 0, nil, fmt.Errorf("SetupDiGetClassDevsEx(%s) failed: %v", guid.ToString(&deviceClassNetGUID), err.Error()) + return 0, nil, fmt.Errorf("SetupDiGetClassDevsEx(%v) failed: %v", deviceClassNetGUID, err.Error()) } // Iterate.