public byte[] ToBuffer() { List <byte> bufferList = new List <byte>(); bufferList.AddRange(BitConverter.GetBytes(Checksum)); bufferList.AddRange(VolumeDroid.ToByteArray()); bufferList.AddRange(FileDroid.ToByteArray()); bufferList.AddRange(VolumeBirthDroid.ToByteArray()); bufferList.AddRange(FileBirthDroid.ToByteArray()); byte[] tempBuffer = Encoding.GetEncoding(1252).GetBytes(Hostname); byte[] hostNameBuffer = new byte[16]; Buffer.BlockCopy(tempBuffer, 0, hostNameBuffer, 0, tempBuffer.Length); bufferList.AddRange(hostNameBuffer); bufferList.AddRange(BitConverter.GetBytes(EntryNumber)); bufferList.AddRange(BitConverter.GetBytes(Unknown0)); bufferList.AddRange(BitConverter.GetBytes(AccessCount)); bufferList.AddRange(BitConverter.GetBytes(LastModified.ToFileTime())); bufferList.AddRange(BitConverter.GetBytes(PinStatus)); if (this.Version > 1) { bufferList.AddRange(BitConverter.GetBytes(Unknown1)); bufferList.AddRange(BitConverter.GetBytes(Unknown2)); bufferList.AddRange(BitConverter.GetBytes(Unknown3)); bufferList.AddRange(BitConverter.GetBytes(Unknown4)); bufferList.AddRange(BitConverter.GetBytes(PathSize)); byte[] pathBuffer = new byte[PathSize * 2]; byte[] tempPathBuffer = Encoding.Unicode.GetBytes(RawPath); Buffer.BlockCopy(tempPathBuffer, 0, pathBuffer, 0, tempPathBuffer.Length); bufferList.AddRange(pathBuffer); bufferList.AddRange(new byte[4] { 0, 0, 0, 0 }); } else { byte[] pathBuffer = new byte[PathSize * 2]; byte[] tempPathBuffer = Encoding.Unicode.GetBytes(RawPath); Buffer.BlockCopy(tempPathBuffer, 0, pathBuffer, 0, tempPathBuffer.Length); bufferList.AddRange(pathBuffer); } return(bufferList.ToArray()); }