public void Dump(TextWriter writer, string indent) { writer.WriteLine(indent + "SECURITY DESCRIPTORS"); using (Stream s = _file.OpenStream(AttributeType.Data, "$SDS", FileAccess.Read)) { byte[] buffer = Utilities.ReadFully(s, (int)s.Length); foreach (var entry in _idIndex.Entries) { int pos = (int)entry.Value.SdsOffset; SecurityDescriptorRecord rec = new SecurityDescriptorRecord(); if (!rec.Read(buffer, pos)) { break; } string secDescStr = "--unknown--"; if (rec.SecurityDescriptor[0] != 0) { RawSecurityDescriptor sd = new RawSecurityDescriptor(rec.SecurityDescriptor, 0); secDescStr = sd.GetSddlForm(AccessControlSections.All); } writer.WriteLine(indent + " SECURITY DESCRIPTOR RECORD"); writer.WriteLine(indent + " Hash: " + rec.Hash); writer.WriteLine(indent + " Id: " + rec.Id); writer.WriteLine(indent + " File Offset: " + rec.OffsetInFile); writer.WriteLine(indent + " Size: " + rec.EntrySize); writer.WriteLine(indent + " Value: " + secDescStr); } } }
private SecurityDescriptor ReadDescriptor(IndexData data) { using (Stream s = _file.OpenStream(AttributeType.Data, "$SDS", FileAccess.Read)) { s.Position = data.SdsOffset; byte[] buffer = Utilities.ReadFully(s, data.SdsLength); SecurityDescriptorRecord record = new SecurityDescriptorRecord(); record.Read(buffer, 0); return(new SecurityDescriptor(new RawSecurityDescriptor(record.SecurityDescriptor, 0))); } }