在 Windows 中,猜测当前 32 位进程是在 32 位还是 64 位架构上运行的官方方法是从 kernel32.dll调用IsWow64Process函数,并查看它是否存在(据我了解文档)。
在 Go 中,我们可以使用syscall包调用在 dll 文件中导出的函数,所以这是我的尝试:
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
dll, err := syscall.LoadDLL("kernel32.dll")
if err != nil {
fmt.Println(err)
}
defer dll.Release()
proc, err := dll.FindProc("IsWow64Process")
if err != nil {
fmt.Println("Proc not found") // not a WOW64 so a 32 bit system?
fmt.Println(err)
}
fmt.Printf("%v\n", proc)
var handle uintptr = uintptr(os.Getpid())
var result uintptr
v, x, y := proc.Call(handle, result)
fmt.Printf("%v %v %v\n", v, x, y)
fmt.Printf("%v\n", result)
}
不幸的是,无论是否使用 WOW64 系统进行测试都会在标准输出中显示相同的内容:
&{0x10ada110 IsWow64Process 2088961457}
0 7 The handle is invalid.
0
我做错了什么?如何实现测试以确定我们的 32 位 Go 程序是在 64 位 CPU(WOW64)上的模拟 32 位上运行还是在真正的 32 位 Windows 上运行?
杨__羊羊
POPMUISE
DIEA
相关分类