From 9cd6430ef91e39e1a0ec0470cf1321a33ef1b887 Mon Sep 17 00:00:00 2001 From: Takuto Ikuta Date: Mon, 27 May 2019 14:19:46 +0900 Subject: [PATCH] windows: add ResumeThread function ref: https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-resumethread Change-Id: I114846c85bc5b8eb8dc742fdc3bdacb7b28cddaa Reviewed-on: https://go-review.googlesource.com/c/sys/+/179037 Reviewed-by: Alex Brainman Run-TryBot: Alex Brainman TryBot-Result: Gobot Gobot --- windows/syscall_windows.go | 1 + windows/zsyscall_windows.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index 108760e4..eace6093 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -257,6 +257,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys AssignProcessToJobObject(job Handle, process Handle) (err error) = kernel32.AssignProcessToJobObject //sys TerminateJobObject(job Handle, exitCode uint32) (err error) = kernel32.TerminateJobObject //sys SetErrorMode(mode uint32) (ret uint32) = kernel32.SetErrorMode +//sys ResumeThread(thread Handle) (ret uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread // Volume Management Functions //sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index 0de0de93..9d5a3bc5 100644 --- a/windows/zsyscall_windows.go +++ b/windows/zsyscall_windows.go @@ -195,6 +195,7 @@ var ( procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procTerminateJobObject = modkernel32.NewProc("TerminateJobObject") procSetErrorMode = modkernel32.NewProc("SetErrorMode") + procResumeThread = modkernel32.NewProc("ResumeThread") procDefineDosDeviceW = modkernel32.NewProc("DefineDosDeviceW") procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW") procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW") @@ -2091,6 +2092,19 @@ func SetErrorMode(mode uint32) (ret uint32) { return } +func ResumeThread(thread Handle) (ret uint32, err error) { + r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0) + ret = uint32(r0) + if ret == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) { r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) if r1 == 0 {