diff --git a/process/process_windows.go b/process/process_windows.go index 4406a673..bc2cbdeb 100644 --- a/process/process_windows.go +++ b/process/process_windows.go @@ -181,8 +181,26 @@ func (p *Process) Status() (string, error) { return "", common.ErrNotImplementedError } func (p *Process) Username() (string, error) { - return "", common.ErrNotImplementedError + pid := p.Pid + // 0x1000 is PROCESS_QUERY_LIMITED_INFORMATION + c, err := syscall.OpenProcess(0x1000, false, uint32(pid)) + if err != nil { + return "", err + } + defer syscall.CloseHandle(c) + + var token syscall.Token + err = syscall.OpenProcessToken(c, syscall.TOKEN_QUERY, &token) + if err != nil { + return "", err + } + defer token.Close() + tokenUser, err := token.GetTokenUser() + + user, domain, _, err := tokenUser.User.Sid.LookupAccount("") + return domain + "\\" + user, err } + func (p *Process) Uids() ([]int32, error) { var uids []int32 @@ -412,7 +430,8 @@ func getRusage(pid int32) (*windows.Rusage, error) { func getMemoryInfo(pid int32) (PROCESS_MEMORY_COUNTERS, error) { var mem PROCESS_MEMORY_COUNTERS - c, err := windows.OpenProcess(windows.PROCESS_QUERY_INFORMATION, false, uint32(pid)) + // PROCESS_QUERY_LIMITED_INFORMATION is 0x1000 + c, err := windows.OpenProcess(0x1000, false, uint32(pid)) if err != nil { return mem, err }