The tool I am working on needs to start a privileged process and wait for the completion of the new process on both Linux and Windows. To keep the OS specific code separated, I use exec.Cmd for handling the new process. On Linux I use the normal exec.Command function to start the process using pkexec to ask for privileged rights and it works without problems.
On Windows I use ShellExecuteEx to start the new process with the "runas" verb (so basically the windows version of sudo that uses windows UAC). This part also works, and called with the flags SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NOASYNC ShellExecuteEx already returns the Handle for the new process. My idea then was to create a exec.Cmd object by hand, and use the handle for initializing the os.Process object that is part of the exec.Cmd object. However, the newHandleProcess in os that I would need to call is not exported. I also can't use the exported FindProcess function in os, because it tries to get the handle of the privileged process with access rights that my parent process does not possess... My current workaround is to use go:linkname to define a NewProcess function in my code that is linked against the unexported newHandleProcess function in os. This approach does work, but I dislike having to use go:linkname... Any ideas how I could achieve my goal without it? Thanks in advance, David -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/cac78b0e-fe02-4f2d-b14b-3744026b546fn%40googlegroups.com.