From ba5294a509c715d7fea0f9022a3d0ca21f64942a Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 17 Nov 2020 22:29:50 +0100 Subject: [PATCH] windows/svc/mgr: fetch service sid type in Config() Currently, doing s.UpdateConfig(s.Config()) will destroy the service, because s.Config() fails to populate the SidType member, but UpdateConfig will set the SidType, so that expression effectively zeros out the SidType. Fix this by having Config() fetch the SidType in the same way that it fetches the other additional fields there, such as DelayedStartUp. Change-Id: Idb917ef1e942020499b411b7777b995c29f0e7d2 Reviewed-on: https://go-review.googlesource.com/c/sys/+/270897 Trust: Jason A. Donenfeld Run-TryBot: Jason A. Donenfeld TryBot-Result: Go Bot Reviewed-by: Brad Fitzpatrick --- windows/svc/mgr/config.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/windows/svc/mgr/config.go b/windows/svc/mgr/config.go index 30d39294..da4df638 100644 --- a/windows/svc/mgr/config.go +++ b/windows/svc/mgr/config.go @@ -98,6 +98,12 @@ func (s *Service) Config() (Config, error) { delayedStart = true } + b, err = s.queryServiceConfig2(windows.SERVICE_CONFIG_SERVICE_SID_INFO) + if err != nil { + return Config{}, err + } + sidType := *(*uint32)(unsafe.Pointer(&b[0])) + return Config{ ServiceType: p.ServiceType, StartType: p.StartType, @@ -110,6 +116,7 @@ func (s *Service) Config() (Config, error) { DisplayName: windows.UTF16PtrToString(p.DisplayName), Description: windows.UTF16PtrToString(p2.Description), DelayedAutoStart: delayedStart, + SidType: sidType, }, nil }