|
|
|
@ -86,6 +86,7 @@ var (
|
|
|
|
|
procDeleteService = modadvapi32.NewProc("DeleteService")
|
|
|
|
|
procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource")
|
|
|
|
|
procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx")
|
|
|
|
|
procEnumDependentServicesW = modadvapi32.NewProc("EnumDependentServicesW")
|
|
|
|
|
procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW")
|
|
|
|
|
procEqualSid = modadvapi32.NewProc("EqualSid")
|
|
|
|
|
procFreeSid = modadvapi32.NewProc("FreeSid")
|
|
|
|
@ -734,6 +735,14 @@ func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) {
|
|
|
|
|
r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)))
|
|
|
|
|
if r1 == 0 {
|
|
|
|
|
err = errnoErr(e1)
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) {
|
|
|
|
|
r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0)
|
|
|
|
|
if r1 == 0 {
|
|
|
|
|