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]); } }
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]); } }