From e44a3b55db15331fb6497c80630cc276086855f8 Mon Sep 17 00:00:00 2001 From: Takuto Ikuta Date: Fri, 24 May 2019 19:23:22 +0900 Subject: [PATCH] windows: add SetErrorMode function Change-Id: I79cd7d7e5b49b55281e63131388bc4693b7eed1e Reviewed-on: https://go-review.googlesource.com/c/sys/+/178779 Reviewed-by: Alex Brainman Run-TryBot: Alex Brainman TryBot-Result: Gobot Gobot --- windows/syscall_windows.go | 1 + windows/types_windows.go | 8 ++++++++ windows/zsyscall_windows.go | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index e33c8864..a0592309 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -254,6 +254,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) = kernel32.CreateJobObjectW //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 // Volume Management Functions //sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW diff --git a/windows/types_windows.go b/windows/types_windows.go index 2aa77160..ca799d5e 100644 --- a/windows/types_windows.go +++ b/windows/types_windows.go @@ -400,6 +400,14 @@ const ( SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000 ) +const ( + // flags for SetErrorMode + SEM_FAILCRITICALERRORS = 0x0001 + SEM_NOALIGNMENTFAULTEXCEPT = 0x0004 + SEM_NOGPFAULTERRORBOX = 0x0002 + SEM_NOOPENFILEERRORBOX = 0x8000 +) + var ( OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index d3ac0e46..9db85719 100644 --- a/windows/zsyscall_windows.go +++ b/windows/zsyscall_windows.go @@ -191,6 +191,7 @@ var ( procCreateJobObjectW = modkernel32.NewProc("CreateJobObjectW") procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procTerminateJobObject = modkernel32.NewProc("TerminateJobObject") + procSetErrorMode = modkernel32.NewProc("SetErrorMode") procDefineDosDeviceW = modkernel32.NewProc("DefineDosDeviceW") procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW") procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW") @@ -2051,6 +2052,12 @@ func TerminateJobObject(job Handle, exitCode uint32) (err error) { return } +func SetErrorMode(mode uint32) (ret uint32) { + r0, _, _ := syscall.Syscall(procSetErrorMode.Addr(), 1, uintptr(mode), 0, 0) + ret = uint32(r0) + 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 {