예제 #1
0
        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;
        }