public static string GetHelperText(string line, int rightsType, out Tuple <string, string, TreeViewItem[]> details, bool translateSID) { var sd = new SecurityDescriptor(line); if (sd.IsOk) { var lSIDs = sd.GetAllSIDs(); var lRights = sd.GetAllRights(); var sb = new StringBuilder(); if (lSIDs.Count != 0) { sb.AppendLine(); sb.AppendLine("SIDs:"); sb.AppendLine("-----"); foreach (var lSID in lSIDs) { sb.AppendLine(SecurityDescriptor.SIDToLong(lSID, translateSID)); } sb.AppendLine("-----"); } if (lRights.Count != 0) { sb.AppendLine(); sb.AppendLine("Rights (" + ACE.RightType(rightsType) + "):"); sb.AppendLine("-----"); foreach (var lRight in lRights) { sb.AppendLine(ACE.RigthToLong(lRight, rightsType)); } sb.AppendLine("-----"); } var aces = sd.GetACEs(); var treeElements = new TreeViewItem[aces.Count]; for (var i = 0; i < aces.Count; i++) { treeElements[i] = ACEToTreeViewItem(aces[i], rightsType, translateSID); } details = new Tuple <string, string, TreeViewItem[]>(sd.GetOwner(), sd.GetGroup(), treeElements); return(sb.ToString()); } details = new Tuple <string, string, TreeViewItem[]>("", "", new TreeViewItem[0]); return(string.Empty); }
private static void TextChangedFunc(object o) { var data = (string)o; var lines = data.Split('\r', '\n'); var allSIDs = new List <string>(); var allRights = new List <string>(); var prevSids = 0; var prevRights = 0; foreach (var line in lines) { if (!string.IsNullOrWhiteSpace(line)) { var sd = new SecurityDescriptor(line.Trim()); if (!sd.IsOk) { continue; } var lSIDs = sd.GetAllSIDs(); foreach (var sid in lSIDs) { if (!allSIDs.Contains(sid)) { allSIDs.Add(sid); } } var lRights = sd.GetAllRights(); foreach (var right in lRights) { if (!allRights.Contains(right)) { allRights.Add(right); } } if (allSIDs.Count != prevSids) { prevSids = allSIDs.Count; var sortedSIDs = allSIDs.OrderBy(q => q[1] == '-' ? "ZZ" + q : q).ToList(); MW.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action <List <string> >((x) => { MW.SIDList.Clear(); foreach (var sid in x) { MW.SIDList.Add(new BoolStringClass(SecurityDescriptor.SIDToLong(sid, MW.IsTranslateSID), sid)); } }), sortedSIDs); } if (allRights.Count != prevRights) { prevRights = allRights.Count; MW.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { var newRightsList = new ObservableCollection <BoolStringClass>(); foreach (var element in MW.RightsList) { if (allRights.Contains(element.Tag)) { element.TextBrush = new SolidColorBrush(Color.FromRgb(50, 150, 255)); } newRightsList.Add(element); } MW.RightsList.Clear(); foreach (var element in newRightsList) { MW.RightsList.Add(element); } })); } } if (TextChangedEvent.WaitOne(0)) { if (_textChangedSpinnerThread != null && _textChangedSpinnerThread.IsAlive) { _textChangedSpinnerThread.Join(); } Thread.CurrentThread.Abort(); return; } } TextChangedEvent.Set(); if (_textChangedSpinnerThread != null && _textChangedSpinnerThread.IsAlive) { _textChangedSpinnerThread.Join(); } Thread.CurrentThread.Abort(); }