process[windows]: take common function to get Win32_Processes.

pull/71/head
WAKAYAMA Shirou 10 years ago
parent cbd943016a
commit 5c8a03100e

@ -108,60 +108,50 @@ func (p *Process) Ppid() (int32, error) {
}
return ret, nil
}
func (p *Process) Name() (string, error) {
func GetWin32Proc(pid int32) ([]Win32_Process, error) {
var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", p.Pid)
query := fmt.Sprintf("WHERE ProcessId = %d", pid)
q := wmi.CreateQuery(&dst, query)
err := wmi.Query(q, &dst)
if err != nil {
return "", err
return []Win32_Process{}, fmt.Errorf("could not get win32Proc: %s", err)
}
if len(dst) != 1 {
return "", fmt.Errorf("could not get Name")
return []Win32_Process{}, fmt.Errorf("could not get win32Proc: empty")
}
return dst, nil
}
func (p *Process) Name() (string, error) {
dst, err := GetWin32Proc(p.Pid)
if err != nil {
return "", fmt.Errorf("could not get Name: %s", err)
}
return dst[0].Name, nil
}
func (p *Process) Exe() (string, error) {
var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", p.Pid)
q := wmi.CreateQuery(&dst, query)
err := wmi.Query(q, &dst)
dst, err := GetWin32Proc(p.Pid)
if err != nil {
return "", err
}
if len(dst) != 1 {
return "", fmt.Errorf("could not get ExecutablePath")
return "", fmt.Errorf("could not get ExecutablePath: %s", err)
}
return *dst[0].ExecutablePath, nil
}
func (p *Process) Cmdline() (string, error) {
var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", p.Pid)
q := wmi.CreateQuery(&dst, query)
err := wmi.Query(q, &dst)
dst, err := GetWin32Proc(p.Pid)
if err != nil {
return "", err
}
if len(dst) != 1 {
return "", fmt.Errorf("could not get CommandLine")
return "", fmt.Errorf("could not get CommandLine: %s", err)
}
return *dst[0].CommandLine, nil
}
func (p *Process) CreateTime() (int64, error) {
var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", p.Pid)
q := wmi.CreateQuery(&dst, query)
err := wmi.Query(q, &dst)
dst, err := GetWin32Proc(p.Pid)
if err != nil {
return 0, err
}
if len(dst) != 1 {
return 0, fmt.Errorf("could not get CreationDate")
return 0, fmt.Errorf("could not get CreationDate: %s", err)
}
date := *dst[0].CreationDate
return date.Unix(), nil
return 0, common.NotImplementedError
}
func (p *Process) Cwd() (string, error) {
@ -191,15 +181,9 @@ func (p *Process) Terminal() (string, error) {
// Nice returnes priority in Windows
func (p *Process) Nice() (int32, error) {
var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", p.Pid)
q := wmi.CreateQuery(&dst, query)
err := wmi.Query(q, &dst)
dst, err := GetWin32Proc(p.Pid)
if err != nil {
return 0, err
}
if len(dst) != 1 {
return 0, fmt.Errorf("could not get Priority")
return 0, fmt.Errorf("could not get Priority: %s", err)
}
return int32(dst[0].Priority), nil
}
@ -221,15 +205,9 @@ func (p *Process) NumFDs() (int32, error) {
return 0, common.NotImplementedError
}
func (p *Process) NumThreads() (int32, error) {
var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", p.Pid)
q := wmi.CreateQuery(&dst, query)
err := wmi.Query(q, &dst)
dst, err := GetWin32Proc(p.Pid)
if err != nil {
return 0, err
}
if len(dst) != 1 {
return 0, fmt.Errorf("could not get ThreadCount")
return 0, fmt.Errorf("could not get ThreadCount: %s", err)
}
return int32(dst[0].ThreadCount), nil
}

Loading…
Cancel
Save