in providers/windows/process_windows.go [266:285]
func (p *process) open() (handle syscall.Handle, err error) {
if p.pid == selfPID {
return syscall.GetCurrentProcess()
}
// Try different access rights, from broader to more limited.
// PROCESS_VM_READ is needed to get command-line and working directory
// PROCESS_QUERY_LIMITED_INFORMATION is only available in Vista+
for _, permissions := range [4]uint32{
syscall.PROCESS_QUERY_INFORMATION | windows.PROCESS_VM_READ,
windows.PROCESS_QUERY_LIMITED_INFORMATION | windows.PROCESS_VM_READ,
syscall.PROCESS_QUERY_INFORMATION,
windows.PROCESS_QUERY_LIMITED_INFORMATION,
} {
if handle, err = syscall.OpenProcess(permissions, false, uint32(p.pid)); err == nil {
break
}
}
return handle, err
}