From c0befee1885197ab8ff3dfbc6a694cd657065c6e Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 12 Apr 2021 09:23:49 -0700 Subject: [PATCH] portlist: use windows OpenCurrentProcessToken, not GetCurrentProcessToken The latter only works on Windows 8+. Also add a TODO to get do this all more efficiently. Signed-off-by: Brad Fitzpatrick --- portlist/portlist_windows.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/portlist/portlist_windows.go b/portlist/portlist_windows.go index f447988ee..4c2578bba 100644 --- a/portlist/portlist_windows.go +++ b/portlist/portlist_windows.go @@ -16,11 +16,21 @@ import ( const pollInterval = 5 * time.Second func listPorts() (List, error) { + // TODO(bradfitz): stop shelling out to netstat and use the + // net/netstat package instead. When doing so, be sure to filter + // out all of 127.0.0.0/8 and not just 127.0.0.1. return listPortsNetstat("-na") } func addProcesses(pl []Port) ([]Port, error) { - if t := windows.GetCurrentProcessToken(); !t.IsElevated() { + // OpenCurrentProcessToken instead of GetCurrentProcessToken, + // as GetCurrentProcessToken only works on Windows 8+. + tok, err := windows.OpenCurrentProcessToken() + if err != nil { + return nil, err + } + defer tok.Close() + if !tok.IsElevated() { return listPortsNetstat("-na") } return listPortsNetstat("-nab")