diff options
Diffstat (limited to 'elevate/shellexecute.go')
-rw-r--r-- | elevate/shellexecute.go | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/elevate/shellexecute.go b/elevate/shellexecute.go index 6290b4f8..e0be9d98 100644 --- a/elevate/shellexecute.go +++ b/elevate/shellexecute.go @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: MIT * - * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. + * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved. */ package elevate @@ -24,7 +24,7 @@ const ( cSEE_MASK_DEFAULT = 0 ) -func ShellExecute(program string, arguments string, directory string, show int32) (err error) { +func ShellExecute(program, arguments, directory string, show int32) (err error) { var ( program16 *uint16 arguments16 *uint16 @@ -107,36 +107,36 @@ func ShellExecute(program string, arguments string, directory string, show int32 } originalPath := dataTableEntry.FullDllName.Buffer explorerPath := windows.StringToUTF16Ptr(filepath.Join(windowsDirectory, "explorer.exe")) - rtlInitUnicodeString(&dataTableEntry.FullDllName, explorerPath) + windows.RtlInitUnicodeString(&dataTableEntry.FullDllName, explorerPath) defer func() { - rtlInitUnicodeString(&dataTableEntry.FullDllName, originalPath) + windows.RtlInitUnicodeString(&dataTableEntry.FullDllName, originalPath) runtime.KeepAlive(explorerPath) }() - if err = coInitializeEx(0, cCOINIT_APARTMENTTHREADED); err == nil { - defer coUninitialize() + if err = windows.CoInitializeEx(0, windows.COINIT_APARTMENTTHREADED); err == nil { + defer windows.CoUninitialize() } var interfacePointer **[0xffff]uintptr - if err = coGetObject( + if err = windows.CoGetObject( windows.StringToUTF16Ptr("Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}"), - &cBIND_OPTS3{ - cbStruct: uint32(unsafe.Sizeof(cBIND_OPTS3{})), - dwClassContext: cCLSCTX_LOCAL_SERVER, + &windows.BIND_OPTS3{ + CbStruct: uint32(unsafe.Sizeof(windows.BIND_OPTS3{})), + ClassContext: windows.CLSCTX_LOCAL_SERVER, }, &windows.GUID{0x6EDD6D74, 0xC007, 0x4E75, [8]byte{0xB7, 0x6A, 0xE5, 0x74, 0x09, 0x95, 0xE2, 0x4C}}, - &interfacePointer, + (**uintptr)(unsafe.Pointer(&interfacePointer)), ); err != nil { return } - defer syscall.Syscall((*interfacePointer)[releaseOffset], 1, uintptr(unsafe.Pointer(interfacePointer)), 0, 0) + defer syscall.SyscallN((*interfacePointer)[releaseOffset], uintptr(unsafe.Pointer(interfacePointer))) if program16 == nil { return } - if ret, _, _ := syscall.Syscall6((*interfacePointer)[shellExecuteOffset], 6, + if ret, _, _ := syscall.SyscallN((*interfacePointer)[shellExecuteOffset], uintptr(unsafe.Pointer(interfacePointer)), uintptr(unsafe.Pointer(program16)), uintptr(unsafe.Pointer(arguments16)), |