public byte[] GetBytes() { byte[] buffer = new byte[Length]; ByteWriter.WriteAnsiString(buffer, 0x00, Cookie, 8); BigEndianWriter.WriteUInt64(buffer, 0x08, DataOffset); BigEndianWriter.WriteUInt64(buffer, 0x10, TableOffset); BigEndianWriter.WriteUInt32(buffer, 0x18, HeaderVersion); BigEndianWriter.WriteUInt32(buffer, 0x1C, MaxTableEntries); BigEndianWriter.WriteUInt32(buffer, 0x20, BlockSize); // We'll write the checksum later BigEndianWriter.WriteGuidBytes(buffer, 0x28, ParentUniqueID); BigEndianWriter.WriteUInt32(buffer, 0x38, ParentTimeStamp); BigEndianWriter.WriteUInt32(buffer, 0x3C, Reserved); ByteWriter.WriteUTF16String(buffer, 0x40, ParentUnicodeName, 256); ParentLocatorEntry1.WriteBytes(buffer, 0x240); ParentLocatorEntry2.WriteBytes(buffer, 0x258); ParentLocatorEntry3.WriteBytes(buffer, 0x270); ParentLocatorEntry4.WriteBytes(buffer, 0x288); ParentLocatorEntry5.WriteBytes(buffer, 0x2A0); ParentLocatorEntry6.WriteBytes(buffer, 0x2B8); ParentLocatorEntry7.WriteBytes(buffer, 0x2D0); ParentLocatorEntry8.WriteBytes(buffer, 0x2E8); uint checksum = VHDFooter.CalculateChecksum(buffer); BigEndianWriter.WriteUInt32(buffer, 0x24, checksum); return(buffer); }
public DynamicDiskHeader(byte[] buffer) { Cookie = ByteReader.ReadAnsiString(buffer, 0x00, 8); DataOffset = BigEndianConverter.ToUInt64(buffer, 0x08); TableOffset = BigEndianConverter.ToUInt64(buffer, 0x10); HeaderVersion = BigEndianConverter.ToUInt32(buffer, 0x18); MaxTableEntries = BigEndianConverter.ToUInt32(buffer, 0x1C); BlockSize = BigEndianConverter.ToUInt32(buffer, 0x20); uint checksum = BigEndianConverter.ToUInt32(buffer, 0x24); ParentUniqueID = BigEndianConverter.ToGuid(buffer, 0x28); ParentTimeStamp = BigEndianConverter.ToUInt32(buffer, 0x38); Reserved = BigEndianConverter.ToUInt32(buffer, 0x3C); ParentUnicodeName = ByteReader.ReadUTF16String(buffer, 0x40, 256).TrimEnd('\0'); ParentLocatorEntry1 = new ParentLocatorEntry(buffer, 0x240); ParentLocatorEntry2 = new ParentLocatorEntry(buffer, 0x258); ParentLocatorEntry3 = new ParentLocatorEntry(buffer, 0x270); ParentLocatorEntry4 = new ParentLocatorEntry(buffer, 0x288); ParentLocatorEntry5 = new ParentLocatorEntry(buffer, 0x2A0); ParentLocatorEntry6 = new ParentLocatorEntry(buffer, 0x2B8); ParentLocatorEntry7 = new ParentLocatorEntry(buffer, 0x2D0); ParentLocatorEntry8 = new ParentLocatorEntry(buffer, 0x2E8); byte[] temp = (byte[])buffer.Clone(); BigEndianWriter.WriteInt32(temp, 0x24, 0); uint expectedChecksum = VHDFooter.CalculateChecksum(temp); m_isValid = String.Equals(Cookie, DynamidDiskHeaderCookie) && (checksum == expectedChecksum) && (HeaderVersion == 0x00010000); }