diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-11-14 00:39:14 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-11-16 18:17:05 +0100 |
commit | 3e294f9c63fd6fea6981c8f4cc265cfea6570f02 (patch) | |
tree | 6e64060b1c3dc40f88eefc91b929a47b39301117 | |
parent | build: llvm doesnt like dashes (diff) | |
download | wireguard-windows-3e294f9c63fd6fea6981c8f4cc265cfea6570f02.tar.xz wireguard-windows-3e294f9c63fd6fea6981c8f4cc265cfea6570f02.zip |
mod: bump x/sys for IsWow64Process2
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | go.sum | 4 | ||||
-rw-r--r-- | main.go | 22 | ||||
-rw-r--r-- | updater/syscall_windows.go | 19 | ||||
-rw-r--r-- | updater/versions_arm.go | 23 | ||||
-rw-r--r-- | updater/zsyscall_windows.go | 52 |
6 files changed, 14 insertions, 108 deletions
@@ -7,7 +7,7 @@ require ( github.com/lxn/win v0.0.0-20201111105847-2a20daff6a55 golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b - golang.org/x/sys v0.0.0-20201112073958-5cba982894dd + golang.org/x/sys v0.0.0-20201113233024-12cec1faf1ba golang.org/x/text v0.3.4 golang.zx2c4.com/wireguard v0.0.20200321-0.20201111175144-60b3766b89b9 ) @@ -12,8 +12,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201113233024-12cec1faf1ba h1:xmhUJGQGbxlod18iJGqVEp9cHIPLl7QiX2aA3to708s= +golang.org/x/sys v0.0.0-20201113233024-12cec1faf1ba/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= @@ -7,15 +7,14 @@ package main import ( "debug/pe" + "errors" "fmt" "log" "os" "runtime" "strconv" "strings" - "syscall" "time" - "unsafe" "golang.org/x/sys/windows" "golang.zx2c4.com/wireguard/tun" @@ -64,25 +63,10 @@ func usage() { os.Exit(1) } -//TODO: replace with https://go-review.googlesource.com/c/sys/+/269077 once merged -func isWow64Process2(handle windows.Handle, processMachine *uint16, nativeMachine *uint16) (err error) { - p := windows.NewLazySystemDLL("kernel32.dll").NewProc("IsWow64Process2") - err = p.Find() - if err != nil { - return - } - ret, _, e := syscall.Syscall(p.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) - if ret == 0 { - err = e - return err - } - return -} - func checkForWow64() { b, err := func() (bool, error) { var processMachine, nativeMachine uint16 - err := isWow64Process2(windows.CurrentProcess(), &processMachine, &nativeMachine) + err := windows.IsWow64Process2(windows.CurrentProcess(), &processMachine, &nativeMachine) if err == nil { if nativeMachine == pe.IMAGE_FILE_MACHINE_ARM64 && runtime.GOARCH == "arm" { //TODO: remove this exception when Go supports arm64 @@ -90,7 +74,7 @@ func checkForWow64() { } return processMachine != pe.IMAGE_FILE_MACHINE_UNKNOWN, nil } - if _, isDllErr := err.(*windows.DLLError); !isDllErr { + if !errors.Is(err, windows.ERROR_PROC_NOT_FOUND) { return false, err } var b bool diff --git a/updater/syscall_windows.go b/updater/syscall_windows.go deleted file mode 100644 index 074ec164..00000000 --- a/updater/syscall_windows.go +++ /dev/null @@ -1,19 +0,0 @@ -/* SPDX-License-Identifier: MIT - * - * Copyright (C) 2019-2020 WireGuard LLC. All Rights Reserved. - */ - -package updater - -import "golang.org/x/sys/windows" - -//sys isWow64Process2Internal(process windows.Handle, processMachine *uint16, nativeMachine *uint16) (err error) = kernel32.IsWow64Process2 - -func isWow64Process2(process windows.Handle) (processMachine, nativeMachine uint16, err error) { - err = procIsWow64Process2.Find() - if err != nil { - return - } - err = isWow64Process2Internal(process, &processMachine, &nativeMachine) - return -} diff --git a/updater/versions_arm.go b/updater/versions_arm.go index f3e43ec3..45b53be5 100644 --- a/updater/versions_arm.go +++ b/updater/versions_arm.go @@ -12,24 +12,17 @@ import ( "golang.org/x/sys/windows" ) -func findArch() (arch string, err error) { - process := windows.CurrentProcess() - _, nativeMachine, err2 := isWow64Process2(process) - if err2 != nil { - var isWow64 bool - if windows.IsWow64Process(process, &isWow64) != nil || !isWow64 { - nativeMachine = pe.IMAGE_FILE_MACHINE_ARMNT - } else { - nativeMachine = pe.IMAGE_FILE_MACHINE_ARM64 - } +func findArch() (string, error) { + var processMachine, nativeMachine uint16 + err := windows.IsWow64Process2(windows.CurrentProcess(), &processMachine, &nativeMachine) + if err != nil { + return "", err } switch nativeMachine { case pe.IMAGE_FILE_MACHINE_ARM64: - arch = "arm64" + return "arm64", nil case pe.IMAGE_FILE_MACHINE_ARMNT: - arch = "arm" - default: - err = errors.New("Invalid GOARCH") + return "arm", nil } - return + return "", errors.New("Invalid GOARCH") } diff --git a/updater/zsyscall_windows.go b/updater/zsyscall_windows.go deleted file mode 100644 index a2d32cc9..00000000 --- a/updater/zsyscall_windows.go +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by 'go generate'; DO NOT EDIT. - -package updater - -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) - errERROR_EINVAL error = syscall.EINVAL -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return errERROR_EINVAL - 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 ( - modkernel32 = windows.NewLazySystemDLL("kernel32.dll") - - procIsWow64Process2 = modkernel32.NewProc("IsWow64Process2") -) - -func isWow64Process2Internal(process windows.Handle, processMachine *uint16, nativeMachine *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procIsWow64Process2.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} |