aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-16 02:50:33 -0600
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-16 02:56:50 -0600
commitca5505be0b85fd9da382ff75b81bb5d05a92378f (patch)
tree4c27f79345b61bc66a2b4baea4958bd490a05d71 /service
parenttunnel: tell wggo about mtu changes (diff)
downloadwireguard-windows-ca5505be0b85fd9da382ff75b81bb5d05a92378f.tar.xz
wireguard-windows-ca5505be0b85fd9da382ff75b81bb5d05a92378f.zip
manager: CreateWellKnownSid is upstreamed now
Diffstat (limited to 'service')
-rw-r--r--service/service_manager.go26
-rw-r--r--service/zsyscall_windows.go13
2 files changed, 1 insertions, 38 deletions
diff --git a/service/service_manager.go b/service/service_manager.go
index 91bb593d..5f9758ec 100644
--- a/service/service_manager.go
+++ b/service/service_manager.go
@@ -53,33 +53,9 @@ type wtsSessionInfo struct {
type wellKnownSidType uint32
-const (
- winBuiltinAdministratorsSid wellKnownSidType = 26
-)
-
//sys wtfQueryUserToken(session uint32, token *windows.Token) (err error) = wtsapi32.WTSQueryUserToken
//sys wtsEnumerateSessions(handle windows.Handle, reserved uint32, version uint32, sessions **wtsSessionInfo, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW
//sys wtsFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory
-//sys createWellKnownSid(sidType wellKnownSidType, domainSid *windows.SID, sid *windows.SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid
-
-//TODO: Upstream this to x/sys/windows
-func localWellKnownSid(sidType wellKnownSidType) (*windows.SID, error) {
- n := uint32(50)
- for {
- b := make([]byte, n)
- sid := (*windows.SID)(unsafe.Pointer(&b[0]))
- err := createWellKnownSid(sidType, nil, sid, &n)
- if err == nil {
- return sid, nil
- }
- if err != windows.ERROR_INSUFFICIENT_BUFFER {
- return nil, err
- }
- if n <= uint32(len(b)) {
- return nil, err
- }
- }
-}
type managerService struct{}
@@ -135,7 +111,7 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest
return
}
- adminSid, err := localWellKnownSid(winBuiltinAdministratorsSid)
+ adminSid, err := windows.CreateWellKnownSid(windows.WinBuiltinAdministratorsSid)
if err != nil {
serviceError = ErrorFindAdministratorsSID
return
diff --git a/service/zsyscall_windows.go b/service/zsyscall_windows.go
index edae1999..d3ca8ddd 100644
--- a/service/zsyscall_windows.go
+++ b/service/zsyscall_windows.go
@@ -44,7 +44,6 @@ var (
procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken")
procWTSEnumerateSessionsW = modwtsapi32.NewProc("WTSEnumerateSessionsW")
procWTSFreeMemory = modwtsapi32.NewProc("WTSFreeMemory")
- procCreateWellKnownSid = modadvapi32.NewProc("CreateWellKnownSid")
procNotifyServiceStatusChangeW = modadvapi32.NewProc("NotifyServiceStatusChangeW")
procSleepEx = modkernel32.NewProc("SleepEx")
)
@@ -78,18 +77,6 @@ func wtsFreeMemory(ptr uintptr) {
return
}
-func createWellKnownSid(sidType wellKnownSidType, domainSid *windows.SID, sid *windows.SID, sizeSid *uint32) (err error) {
- r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0)
- if r1 == 0 {
- if e1 != 0 {
- err = errnoErr(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
-}
-
func notifyServiceStatusChange(service windows.Handle, notifyMask uint32, notifyBuffer uintptr) (status uint32) {
r0, _, _ := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(notifyBuffer))
status = uint32(r0)