From f3918c30c5c2cb527c0b071a27c35120a6c0719a Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Wed, 5 Apr 2017 12:58:12 -0400 Subject: [PATCH] windows: add SetStdHandle https://msdn.microsoft.com/en-us/library/windows/desktop/ms686244(v=vs.85).aspx Change-Id: If7d460a9fb43767c0a3ee55e86faf3356162c81d Reviewed-on: https://go-review.googlesource.com/39609 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- windows/syscall_windows.go | 1 + windows/zsyscall_windows.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index 7cc7220f..99b11fe6 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -94,6 +94,7 @@ func NewCallbackCDecl(fn interface{}) uintptr //sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] //sys CloseHandle(handle Handle) (err error) //sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] +//sys SetStdHandle(stdhandle uint32, handle Handle) (err error) //sys findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW //sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW //sys FindClose(handle Handle) (err error) diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index 0797ad09..f7bc8d68 100644 --- a/windows/zsyscall_windows.go +++ b/windows/zsyscall_windows.go @@ -78,6 +78,7 @@ var ( procSetFilePointer = modkernel32.NewProc("SetFilePointer") procCloseHandle = modkernel32.NewProc("CloseHandle") procGetStdHandle = modkernel32.NewProc("GetStdHandle") + procSetStdHandle = modkernel32.NewProc("SetStdHandle") procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") procFindNextFileW = modkernel32.NewProc("FindNextFileW") procFindClose = modkernel32.NewProc("FindClose") @@ -633,6 +634,18 @@ func GetStdHandle(stdhandle uint32) (handle Handle, err error) { return } +func SetStdHandle(stdhandle uint32, handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) handle = Handle(r0)