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.

Reply via email to