示例#1
0
        private IEnumerable <object> ReadValues(IntPtr buffer, int count, ClaimSecurityValueType type)
        {
            if (buffer == IntPtr.Zero || count == 0)
            {
                return(new object[0]);
            }

            switch (type)
            {
            case ClaimSecurityValueType.Int64:
                return(ReadTyped <long>(buffer, count).Cast <object>());

            case ClaimSecurityValueType.UInt64:
                return(ReadTyped <ulong>(buffer, count).Cast <object>());

            case ClaimSecurityValueType.OctetString:
                return(ReadTyped <ClaimSecurityAttributeOctetStringValue>(buffer, count).Select(v => v.ToArray()).Cast <object>());

            case ClaimSecurityValueType.Sid:
                return(ReadTyped <ClaimSecurityAttributeOctetStringValue>(buffer, count).Select(v => v.ToSid()).Cast <object>());

            case ClaimSecurityValueType.Boolean:
                return(ReadTyped <long>(buffer, count).Select(v => v != 0).Cast <object>());

            case ClaimSecurityValueType.String:
                return(ReadTyped <UnicodeStringOut>(buffer, count).Select(n => n.ToString()));

            case ClaimSecurityValueType.Fqbn:
                return(ReadTyped <ClaimSecurityAttributeFqbnValue>(buffer, count).Select(v => new ClaimSecurityAttributeFqbn(v)).Cast <object>());

            default:
                return(new object[0]);
            }
        }
示例#2
0
        internal ClaimSecurityAttribute(string name, ClaimSecurityValueType value_type, ClaimSecurityFlags flags, IEnumerable <object> values)
        {
            Name      = name;
            ValueType = value_type;
            Flags     = flags;
            var array = values.ToArray();

            Values     = array;
            ValueCount = array.Length;
        }
        private IEnumerable <object> ReadValues(byte[] data, BinaryReader reader, int count, ClaimSecurityValueType type)
        {
            List <object> ret = new List <object>();

            if (count == 0)
            {
                return(new object[0]);
            }

            IEnumerable <int> offsets = Enumerable.Range(0, count).Select(i => reader.ReadInt32());

            switch (type)
            {
            case ClaimSecurityValueType.Int64:
                return(offsets.Select(i => BitConverter.ToInt64(data, i)).Cast <object>());

            case ClaimSecurityValueType.UInt64:
                return(offsets.Select(i => BitConverter.ToUInt64(data, i)).Cast <object>());

            case ClaimSecurityValueType.OctetString:
                return(offsets.Select(i => ReadOctets(data, i)).Cast <object>());

            case ClaimSecurityValueType.Sid:
                return(offsets.Select(i => new Sid(ReadOctets(data, i))).Cast <object>());

            case ClaimSecurityValueType.Boolean:
                return(offsets.Select(i => BitConverter.ToUInt64(data, i) != 0).Cast <object>());

            case ClaimSecurityValueType.String:
                return(offsets.Select(i => ReadString(data, i)).Cast <object>());

            case ClaimSecurityValueType.Fqbn:
                throw new ArgumentException("Unsupported claim type FQBN.");

            default:
                return(new object[0]);
            }
        }