[process][windows] Deduplicate repeated code in CreateToolhelp32Snapshot related functions

pull/708/head
Lomanic 6 years ago
parent 2ac72f1fa1
commit f036e8b9e8

@ -561,23 +561,18 @@ func (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {
defer w32.CloseHandle(snap) defer w32.CloseHandle(snap)
var pe32 w32.PROCESSENTRY32 var pe32 w32.PROCESSENTRY32
pe32.DwSize = uint32(unsafe.Sizeof(pe32)) pe32.DwSize = uint32(unsafe.Sizeof(pe32))
if w32.Process32First(snap, &pe32) == false { if !w32.Process32First(snap, &pe32) {
return out, windows.GetLastError() return out, windows.GetLastError()
} }
for {
if pe32.Th32ParentProcessID == uint32(p.Pid) { if pe32.Th32ParentProcessID == uint32(p.Pid) {
p, err := NewProcess(int32(pe32.Th32ProcessID)) p, err := NewProcess(int32(pe32.Th32ProcessID))
if err == nil { if err == nil {
out = append(out, p) out = append(out, p)
} }
} }
if !w32.Process32Next(snap, &pe32) {
for w32.Process32Next(snap, &pe32) { break
if pe32.Th32ParentProcessID == uint32(p.Pid) {
p, err := NewProcess(int32(pe32.Th32ProcessID))
if err == nil {
out = append(out, p)
}
} }
} }
return out, nil return out, nil
@ -695,22 +690,19 @@ func getFromSnapProcess(pid int32) (int32, int32, string, error) {
defer w32.CloseHandle(snap) defer w32.CloseHandle(snap)
var pe32 w32.PROCESSENTRY32 var pe32 w32.PROCESSENTRY32
pe32.DwSize = uint32(unsafe.Sizeof(pe32)) pe32.DwSize = uint32(unsafe.Sizeof(pe32))
if w32.Process32First(snap, &pe32) == false { if !w32.Process32First(snap, &pe32) {
return 0, 0, "", windows.GetLastError() return 0, 0, "", windows.GetLastError()
} }
for {
if pe32.Th32ProcessID == uint32(pid) { if pe32.Th32ProcessID == uint32(pid) {
szexe := windows.UTF16ToString(pe32.SzExeFile[:]) szexe := windows.UTF16ToString(pe32.SzExeFile[:])
return int32(pe32.Th32ParentProcessID), int32(pe32.CntThreads), szexe, nil return int32(pe32.Th32ParentProcessID), int32(pe32.CntThreads), szexe, nil
} }
if !w32.Process32Next(snap, &pe32) {
for w32.Process32Next(snap, &pe32) { break
if pe32.Th32ProcessID == uint32(pid) {
szexe := windows.UTF16ToString(pe32.SzExeFile[:])
return int32(pe32.Th32ParentProcessID), int32(pe32.CntThreads), szexe, nil
} }
} }
return 0, 0, "", fmt.Errorf("Couldn't find pid: %d", pid) return 0, 0, "", fmt.Errorf("couldn't find pid: %d", pid)
} }
// Get processes // Get processes

Loading…
Cancel
Save