// CloseHandle wraps the windows.CloseServiceHandle method. // This allows us to stub out this module for testing. func (m *manager) CloseHandle(handle windows.Handle) error { return windows.CloseServiceHandle(handle) }
return "", errors.Annotate(err, "Failed to decrypt password") } return passwd, nil } // listServices returns an array of strings containing all the services on // the current system. It is defined as a variable to allow us to mock it out // for testing var listServices = func() (services []string, err error) { host := syscall.StringToUTF16Ptr(".") sc, err := windows.OpenSCManager(host, nil, windows.SC_MANAGER_ALL_ACCESS) defer func() { // The close service handle error is less important than others if err == nil { err = windows.CloseServiceHandle(sc) } }() if err != nil { return nil, err } var needed uint32 var returned uint32 var resume uint32 = 0 var enum []enumService for { var buf [512]enumService err := enumServicesStatus(sc, windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, uintptr(unsafe.Pointer(&buf[0])), uint32(unsafe.Sizeof(buf)), &needed, &returned, &resume)