From 8fda49ba967d02398a02c7126334ce65167ecdd8 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 25 Apr 2019 14:36:00 +0200 Subject: main: forbid wow64 executions Signed-off-by: Jason A. Donenfeld --- main.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'main.go') diff --git a/main.go b/main.go index c9941ab9..8aef8724 100644 --- a/main.go +++ b/main.go @@ -28,9 +28,11 @@ var flags = [...]string{ } //sys messageBoxEx(hwnd windows.Handle, text *uint16, title *uint16, typ uint, languageId uint16) = user32.MessageBoxExW +//sys isWow64Process(handle windows.Handle, isWow64 *bool) (err error) = kernel32.IsWow64Process func fatal(v ...interface{}) { messageBoxEx(0, windows.StringToUTF16Ptr(fmt.Sprint(v...)), windows.StringToUTF16Ptr("Error"), 0x00000010, 0) + os.Exit(1) } func usage() { @@ -43,6 +45,21 @@ func usage() { os.Exit(1) } +func checkForWow64() { + var b bool + p, err := windows.GetCurrentProcess() + if err != nil { + fatal("Unable to determine current process handle: ", err) + } + err = isWow64Process(p, &b) + if err != nil { + fatal("Unable to determine whether the process is running under WOW64: ", err) + } + if b { + fatal("You must use the 64-bit version of WireGuard on this computer.") + } +} + //sys shellExecute(hwnd windows.Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int) (err error) = shell32.ShellExecuteW func execElevatedManagerServiceInstaller() error { path, err := os.Executable() @@ -66,6 +83,8 @@ func pipeFromHandleArgument(handleStr string) (*os.File, error) { } func main() { + checkForWow64() + if len(os.Args) <= 1 { if ui.RaiseUI() { return -- cgit v1.2.3-59-g8ed1b