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 <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/windows/svc/mgr/config.go b/windows/svc/mgr/config.go
index 30d3929..da4df63 100644
--- a/windows/svc/mgr/config.go
+++ b/windows/svc/mgr/config.go
@@ -98,6 +98,12 @@
 		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 @@
 		DisplayName:      windows.UTF16PtrToString(p.DisplayName),
 		Description:      windows.UTF16PtrToString(p2.Description),
 		DelayedAutoStart: delayedStart,
+		SidType:          sidType,
 	}, nil
 }