private static TreeViewItem ACEToTreeViewItem(ACE ace, int rightsType, bool translateSID) { var rv = new TreeViewItem { Header = SecurityDescriptor.SIDToLong(ace.GetSID(), translateSID) }; rv.Items.Clear(); foreach (var right in ace.GetAllRights()) { rv.Items.Add(ACE.RigthToLong(right, rightsType)); } return(rv); }
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 void EdtContent_OnSelectionChanged(object sender, RoutedEventArgs e) { try { var lNumber = EdtContent.GetLineIndexFromCharacterIndex(EdtContent.CaretIndex); var line = _lines[lNumber]; var obj = line; Tuple <string, string, TreeViewItem[]> detail; var r = ReportModel.GetHelperText(line, _rightsType, out detail, _translateSID); if (string.IsNullOrWhiteSpace(r)) { line = _lines[lNumber + 1]; r = ReportModel.GetHelperText(line, _rightsType, out detail, _translateSID); } else { obj = (lNumber == 0) ? string.Empty : _lines[lNumber - 1]; } EdtHelper.Text = r; lblObject.Text = "Object:\n " + obj; lblObject.Visibility = string.IsNullOrWhiteSpace(obj) ? Visibility.Collapsed : Visibility.Visible; lblOwner.Text = "Owner:\n " + SecurityDescriptor.SIDToLong(detail.Item1, _translateSID); lblOwner.Visibility = string.IsNullOrWhiteSpace(detail.Item1) ? Visibility.Collapsed : Visibility.Visible; lblGroup.Text = "Group:\n " + SecurityDescriptor.SIDToLong(detail.Item2, _translateSID); lblGroup.Visibility = string.IsNullOrWhiteSpace(detail.Item2) ? Visibility.Collapsed : Visibility.Visible; treeACE.Items.Clear(); foreach (var treeViewItem in detail.Item3) { treeACE.Items.Add(treeViewItem); } treeACE.Visibility = (detail.Item3.Length == 0) ? Visibility.Collapsed : Visibility.Visible; } catch { EdtHelper.Text = string.Empty; lblOwner.Visibility = Visibility.Collapsed; lblGroup.Visibility = Visibility.Collapsed; treeACE.Visibility = Visibility.Collapsed; } }
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(); }