3 回答
TA贡献1943条经验 获得超7个赞
我相信问题在于您的proc.Call
. 的预期参数IsWow64Process
是一个 HANDLE,它与pid
. 这就是为什么它表明句柄无效。
以下 SO 问题How to get process handle from process id表示您需要OpenProcess
在 pid 中调用passsing 并返回句柄。
编辑: GetCurrentProcess 在syscall 中定义。所以我认为你可以用Getpid
以下内容替换通话:
handle, err := syscall.GetCurrentProcess()
TA贡献1765条经验 获得超5个赞
好的,这是一个工作代码:
package main
import (
"syscall"
"fmt"
"unsafe"
)
func main() {
dll, err := syscall.LoadDLL("kernel32.dll")
if err != nil {
fmt.Println("Can't load kernel32")
fmt.Println(err)
}
defer dll.Release()
proc, err := dll.FindProc("IsWow64Process")
if err != nil {
fmt.Println("Proc not found")
fmt.Println(err)
}
fmt.Printf("%v\n",proc)
handle, err := syscall.GetCurrentProcess()
if err != nil {
fmt.Println("Handle not found")
fmt.Println(err)
}
fmt.Printf("%v\n",handle)
var result bool
v, x, y := proc.Call(uintptr(handle), uintptr(unsafe.Pointer(&result)))
fmt.Printf("%v %v %v\n",v,x,y)
fmt.Printf("%v\n",result)
}
该result变种将是一个WOW64系统和假对于32位系统真。
TA贡献1820条经验 获得超2个赞
你也可以使用 golang.org/x/sys/windows
package main
import (
"fmt"
"golang.org/x/sys/windows"
)
func main() {
handle := windows.CurrentProcess()
var isWow64 bool
err := windows.IsWow64Process(handle, &isWow64)
if err != nil {
panic(err)
}
fmt.Println(isWow64)
}
- 3 回答
- 0 关注
- 198 浏览
添加回答
举报