From ca5505be0b85fd9da382ff75b81bb5d05a92378f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sat, 16 Mar 2019 02:50:33 -0600 Subject: manager: CreateWellKnownSid is upstreamed now --- service/service_manager.go | 26 +------------------------- service/zsyscall_windows.go | 13 ------------- 2 files changed, 1 insertion(+), 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) -- cgit v1.2.3-59-g8ed1b