|
| 1 | +/* SPDX-License-Identifier: MIT |
| 2 | + * |
| 3 | + * Copyright (C) 2019-2020 WireGuard LLC. All Rights Reserved. |
| 4 | + */ |
| 5 | + |
| 6 | +package updater |
| 7 | + |
| 8 | +import "golang.org/x/sys/windows" |
| 9 | + |
| 10 | +const ( |
| 11 | + // TODO: Push those constants upstream. golang.zx2c4.com/wireguard/tun/wintun/memmod is declaring them too. It will share the benefit. |
| 12 | + IMAGE_FILE_MACHINE_UNKNOWN = 0 |
| 13 | + IMAGE_FILE_MACHINE_TARGET_HOST = 0x0001 // Useful for indicating we want to interact with the host and not a WoW guest. |
| 14 | + IMAGE_FILE_MACHINE_I386 = 0x014c // Intel 386. |
| 15 | + IMAGE_FILE_MACHINE_R3000 = 0x0162 // MIPS little-endian, 0x160 big-endian |
| 16 | + IMAGE_FILE_MACHINE_R4000 = 0x0166 // MIPS little-endian |
| 17 | + IMAGE_FILE_MACHINE_R10000 = 0x0168 // MIPS little-endian |
| 18 | + IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x0169 // MIPS little-endian WCE v2 |
| 19 | + IMAGE_FILE_MACHINE_ALPHA = 0x0184 // Alpha_AXP |
| 20 | + IMAGE_FILE_MACHINE_SH3 = 0x01a2 // SH3 little-endian |
| 21 | + IMAGE_FILE_MACHINE_SH3DSP = 0x01a3 |
| 22 | + IMAGE_FILE_MACHINE_SH3E = 0x01a4 // SH3E little-endian |
| 23 | + IMAGE_FILE_MACHINE_SH4 = 0x01a6 // SH4 little-endian |
| 24 | + IMAGE_FILE_MACHINE_SH5 = 0x01a8 // SH5 |
| 25 | + IMAGE_FILE_MACHINE_ARM = 0x01c0 // ARM Little-Endian |
| 26 | + IMAGE_FILE_MACHINE_THUMB = 0x01c2 // ARM Thumb/Thumb-2 Little-Endian |
| 27 | + IMAGE_FILE_MACHINE_ARMNT = 0x01c4 // ARM Thumb-2 Little-Endian |
| 28 | + IMAGE_FILE_MACHINE_AM33 = 0x01d3 |
| 29 | + IMAGE_FILE_MACHINE_POWERPC = 0x01F0 // IBM PowerPC Little-Endian |
| 30 | + IMAGE_FILE_MACHINE_POWERPCFP = 0x01f1 |
| 31 | + IMAGE_FILE_MACHINE_IA64 = 0x0200 // Intel 64 |
| 32 | + IMAGE_FILE_MACHINE_MIPS16 = 0x0266 // MIPS |
| 33 | + IMAGE_FILE_MACHINE_ALPHA64 = 0x0284 // ALPHA64 |
| 34 | + IMAGE_FILE_MACHINE_MIPSFPU = 0x0366 // MIPS |
| 35 | + IMAGE_FILE_MACHINE_MIPSFPU16 = 0x0466 // MIPS |
| 36 | + IMAGE_FILE_MACHINE_AXP64 = IMAGE_FILE_MACHINE_ALPHA64 |
| 37 | + IMAGE_FILE_MACHINE_TRICORE = 0x0520 // Infineon |
| 38 | + IMAGE_FILE_MACHINE_CEF = 0x0CEF |
| 39 | + IMAGE_FILE_MACHINE_EBC = 0x0EBC // EFI Byte Code |
| 40 | + IMAGE_FILE_MACHINE_AMD64 = 0x8664 // AMD64 (K8) |
| 41 | + IMAGE_FILE_MACHINE_M32R = 0x9041 // M32R little-endian |
| 42 | + IMAGE_FILE_MACHINE_ARM64 = 0xAA64 // ARM64 Little-Endian |
| 43 | + IMAGE_FILE_MACHINE_CEE = 0xC0EE |
| 44 | +) |
| 45 | + |
| 46 | +//sys isWow64Process2Internal(process windows.Handle, processMachine *uint16, nativeMachine *uint16) (err error) = kernel32.IsWow64Process2 |
| 47 | + |
| 48 | +func isWow64Process2(process windows.Handle) (processMachine, nativeMachine uint16, err error) { |
| 49 | + err = procIsWow64Process2.Find() |
| 50 | + if err != nil { |
| 51 | + return |
| 52 | + } |
| 53 | + err = isWow64Process2Internal(process, &processMachine, &nativeMachine) |
| 54 | + return |
| 55 | +} |
0 commit comments