diff --git a/util/winutil/svcdiag_windows.go b/util/winutil/svcdiag_windows.go index cd7c150aa..372377cf9 100644 --- a/util/winutil/svcdiag_windows.go +++ b/util/winutil/svcdiag_windows.go @@ -60,13 +60,13 @@ type walkSvcFunc func(*mgr.Service, mgr.Config) // walkServices opens the service named rootSvcName and walks its dependency // graph, invoking callback for each service (including the root itself). func walkServices(rootSvcName string, callback walkSvcFunc) error { - scm, err := connectToLocalSCMForRead() + scm, err := ConnectToLocalSCMForRead() if err != nil { return fmt.Errorf("connecting to Service Control Manager: %w", err) } defer scm.Disconnect() - rootSvc, err := openServiceForRead(scm, rootSvcName) + rootSvc, err := OpenServiceForRead(scm, rootSvcName) if err != nil { return fmt.Errorf("opening service %q: %w", rootSvcName, err) } @@ -102,7 +102,7 @@ func walkServices(rootSvcName string, callback walkSvcFunc) error { continue } - depSvc, err := openServiceForRead(scm, depName) + depSvc, err := OpenServiceForRead(scm, depName) if err != nil { return fmt.Errorf("opening service %q: %w", depName, err) } @@ -276,10 +276,10 @@ func makeLogEntry(svc *mgr.Service, status svc.Status, cfg mgr.Config) (entry sv return entry } -// connectToLocalSCMForRead connects to the Windows Service Control Manager with +// ConnectToLocalSCMForRead connects to the Windows Service Control Manager with // read-only access. x/sys/windows/svc/mgr/Connect requests read+write access, -// which requires higher privileges than we want. -func connectToLocalSCMForRead() (*mgr.Mgr, error) { +// which requires Administrative access rights. +func ConnectToLocalSCMForRead() (*mgr.Mgr, error) { h, err := windows.OpenSCManager(nil, nil, windows.GENERIC_READ) if err != nil { return nil, err @@ -287,10 +287,10 @@ func connectToLocalSCMForRead() (*mgr.Mgr, error) { return &mgr.Mgr{Handle: h}, nil } -// openServiceForRead opens a service with read-only access. +// OpenServiceForRead opens a service with read-only access. // x/sys/windows/svc/mgr/(*Mgr).OpenService requests read+write access, -// which requires higher privileges than we want. -func openServiceForRead(scm *mgr.Mgr, svcName string) (*mgr.Service, error) { +// which requires Administrative access rights. +func OpenServiceForRead(scm *mgr.Mgr, svcName string) (*mgr.Service, error) { svcNamePtr, err := windows.UTF16PtrFromString(svcName) if err != nil { return nil, err