public IEnumerable <StatusDetail> GetStatusInternalGroove()
        {
            //const string hklm = "HKEY_LOCAL_MACHINE";
            const string subkeyString = @"Software\Microsoft\Office"; // SkyDrive\UserSyncRoots\";

            using (var key = Registry.CurrentUser.OpenSubKey(subkeyString))
            {
                if (key == null)
                {
                    yield return(new StatusDetail()
                    {
                        Status = ServiceStatus.OnDemandOrUnknown, ServiceType = "Groove"
                    });
                }
                else
                {
                    if (key.SubKeyCount == 0)
                    {
                        yield return(new StatusDetail()
                        {
                            Status = ServiceStatus.OnDemandOrUnknown
                        });
                    }
                    foreach (var subkey in key.GetSubKeyNames())
                    {
                        using (var userKey = key.OpenSubKey(String.Format("{0}{1}", subkey, @"\Common\Internet")))
                        {
                            if (userKey != null && userKey.GetValue("LocalSyncClientDiskLocation") as String[] != null)
                            {
                                string[] folders = userKey.GetValue("LocalSyncClientDiskLocation") as String[];
                                foreach (var folder in folders)
                                {
                                    var detail = new StatusDetail();
                                    try
                                    {
                                        detail.UserName = WindowsIdentity.GetCurrent().Name;
                                        detail.UserSID  = UserPrincipal.Current.Sid.ToString();


                                        string[] parts = subkey.Split('!');

                                        detail.ServiceType = String.Format("Groove{0}", parts[parts.Length - 1]);
                                    }
                                    catch (Exception ex)
                                    {
                                        detail.UserName = String.Format("Groove - {0}: {1}", ex.GetType().ToString(),
                                                                        ex.Message);
                                        OneDriveLib.WriteLog.WriteErrorEvent(detail.UserName);
                                    }
                                    detail.LocalPath    = folder;
                                    detail.StatusString = GetStatus(detail.LocalPath).ToString();
                                    yield return(detail);
                                }
                            }
                        }
                    }
                }
            }
        }
        public IEnumerable <StatusDetail> GetStatusInternal()
        {
            //const string hklm = "HKEY_LOCAL_MACHINE";
            const string subkeyString = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\"; // SkyDrive\UserSyncRoots\";

            using (var key = Registry.LocalMachine.OpenSubKey(subkeyString))
            {
                if (key == null)
                {
                    yield return(new StatusDetail()
                    {
                        Status = ServiceStatus.OnDemandOrUnknown
                    });
                }
                else
                {
                    if (key.SubKeyCount == 0)
                    {
                        yield return(new StatusDetail()
                        {
                            Status = ServiceStatus.OnDemandOrUnknown, ServiceType = "OneDrive"
                        });
                    }
                    foreach (var subkey in key.GetSubKeyNames())
                    {
                        using (var userKey = key.OpenSubKey(String.Format("{0}{1}", subkey, @"\UserSyncRoots")))
                        {
                            if (userKey != null)
                            {
                                foreach (var valueName in userKey.GetValueNames())
                                {
                                    var detail = new StatusDetail();
                                    try
                                    {
                                        var    id       = new SecurityIdentifier(valueName);
                                        string userName = id.Translate(typeof(NTAccount)).Value;
                                        detail.UserName = userName;
                                        detail.UserSID  = valueName;


                                        string[] parts = userKey.Name.Split('!');

                                        if (parts.Length > 1)
                                        {
                                            detail.ServiceType = parts[Math.Min(2, parts.Length - 1)].Split('|')[0];
                                        }
                                        else
                                        {
                                            detail.ServiceType = "INVALID";
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        detail.UserName = String.Format("{0}: {1}", ex.GetType().ToString(),
                                                                        ex.Message);
                                        OneDriveLib.WriteLog.WriteErrorEvent("OneDrive " + detail.UserName);
                                    }
                                    detail.LocalPath    = userKey.GetValue(valueName) as string;
                                    detail.StatusString = GetStatus(detail.LocalPath).ToString();
                                    yield return(detail);
                                }
                            }
                        }
                    }
                }
            }
        }