3 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
我相信問(wèn)題在于您的proc.Call
. 的預(yù)期參數(shù)IsWow64Process
是一個(gè) HANDLE,它與pid
. 這就是為什么它表明句柄無(wú)效。
以下 SO 問(wèn)題How to get process handle from process id表示您需要OpenProcess
在 pid 中調(diào)用passsing 并返回句柄。
編輯: GetCurrentProcess 在syscall 中定義。所以我認(rèn)為你可以用Getpid
以下內(nèi)容替換通話:
handle, err := syscall.GetCurrentProcess()

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
好的,這是一個(gè)工作代碼:
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變種將是一個(gè)WOW64系統(tǒng)和假對(duì)于32位系統(tǒng)真。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
你也可以使用 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 關(guān)注
- 243 瀏覽
添加回答
舉報(bào)