private void listViewAcl_SelectedIndexChanged(object sender, EventArgs e) { Ace ace = GetSelectedAce(); if (ace == null) { return; } Type access_type = _access_type; AccessMask valid_access = _valid_access; AccessMask mapped_mask = _mapping.MapMask(ace.Mask) & _valid_access; bool generic_access_mask = false; if (ace.Type == AceType.MandatoryLabel) { mapped_mask = ace.Mask; access_type = typeof(MandatoryLabelPolicy); valid_access = 0x7; } else if (ace.Flags.HasFlag(AceFlags.InheritOnly)) { mapped_mask = ace.Mask; generic_access_mask = true; valid_access = valid_access | GenericAccessRights.GenericRead | GenericAccessRights.GenericWrite | GenericAccessRights.GenericExecute | GenericAccessRights.GenericAll; } if (access_type != _current_access_type || generic_access_mask != _generic_access_mask) { _generic_access_mask = generic_access_mask; _current_access_type = access_type; var masks = Win32Utils.GetMaskDictionary(access_type, valid_access, _sdk_names); var ordered = generic_access_mask ? masks.OrderByDescending(p => p.Key) : masks.OrderBy(p => p.Key); ListViewItem[] items = ordered.Select(pair => { ListViewItem item = new ListViewItem(pair.Value); item.SubItems.Add($"0x{pair.Key:X08}"); item.Tag = pair.Key; return(item); } ).ToArray(); listViewAccess.Items.Clear(); listViewAccess.Items.AddRange(items); listViewAccess.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); listViewAccess.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); } _read_only_checks = false; foreach (ListViewItem item in listViewAccess.Items) { uint mask = (uint)item.Tag; item.Checked = (mapped_mask & mask) != 0; } _read_only_checks = true; }
private void listViewAcl_SelectedIndexChanged(object sender, EventArgs e) { Ace ace = GetSelectedAce(); if (ace == null) { return; } Type access_type = _access_type; AccessMask valid_access = _valid_access; AccessMask mapped_mask = _mapping.MapMask(ace.Mask) & _valid_access; if (ace.Type == AceType.MandatoryLabel) { mapped_mask = ace.Mask; access_type = typeof(MandatoryLabelPolicy); valid_access = 0x7; } if (access_type != _current_access_type) { _current_access_type = access_type; ListViewItem[] items = Win32Utils.GetMaskDictionary(access_type, valid_access).Select(pair => { ListViewItem item = new ListViewItem(pair.Value); item.SubItems.Add($"0x{pair.Key:X08}"); item.Tag = pair.Key; return(item); } ).ToArray(); listViewAccess.Items.Clear(); listViewAccess.Items.AddRange(items); listViewAccess.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); listViewAccess.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); } _read_only_checks = false; foreach (ListViewItem item in listViewAccess.Items) { uint mask = (uint)item.Tag; item.Checked = (mapped_mask & mask) != 0; } _read_only_checks = true; }