public override int Write(byte[] buffer, int offset) { byte nameLength = 0; ushort nameOffset = 0; if (Name != null) { nameOffset = 0x18; nameLength = (byte)Name.Length; } ushort dataOffset = (ushort)Utilities.RoundUp(0x18 + (nameLength * 2), 8); int length = (int)Utilities.RoundUp(dataOffset + _memoryBuffer.Capacity, 8); Utilities.WriteBytesLittleEndian((uint)_type, buffer, offset + 0x00); Utilities.WriteBytesLittleEndian(length, buffer, offset + 0x04); buffer[offset + 0x08] = _nonResidentFlag; buffer[offset + 0x09] = nameLength; Utilities.WriteBytesLittleEndian(nameOffset, buffer, offset + 0x0A); Utilities.WriteBytesLittleEndian((ushort)_flags, buffer, offset + 0x0C); Utilities.WriteBytesLittleEndian(_attributeId, buffer, offset + 0x0E); Utilities.WriteBytesLittleEndian((int)_memoryBuffer.Capacity, buffer, offset + 0x10); Utilities.WriteBytesLittleEndian(dataOffset, buffer, offset + 0x14); buffer[offset + 0x16] = _indexedFlag; buffer[offset + 0x17] = 0; // Padding if (Name != null) { Array.Copy(Encoding.Unicode.GetBytes(Name), 0, buffer, offset + nameOffset, nameLength * 2); } _memoryBuffer.Read(0, buffer, offset + dataOffset, (int)_memoryBuffer.Capacity); return((int)length); }