internal byte[] Rebuild() { if (GPTBuffer == null) { TableSize = 0x4200; TableOffset = 0; GPTBuffer = new byte[TableSize]; } else { Array.Clear(GPTBuffer, (int)TableOffset, (int)TableSize); } UInt32 PartitionOffset = TableOffset; foreach (Partition CurrentPartition in Partitions) { ByteOperations.WriteGuid(GPTBuffer, PartitionOffset + 0x00, CurrentPartition.PartitionTypeGuid); ByteOperations.WriteGuid(GPTBuffer, PartitionOffset + 0x10, CurrentPartition.PartitionGuid); ByteOperations.WriteUInt64(GPTBuffer, PartitionOffset + 0x20, CurrentPartition.FirstSector); ByteOperations.WriteUInt64(GPTBuffer, PartitionOffset + 0x28, CurrentPartition.LastSector); ByteOperations.WriteUInt64(GPTBuffer, PartitionOffset + 0x30, CurrentPartition.Attributes); ByteOperations.WriteUnicodeString(GPTBuffer, PartitionOffset + 0x38, CurrentPartition.Name, 0x48); PartitionOffset += PartitionEntrySize; } ByteOperations.WriteUInt32(GPTBuffer, HeaderOffset + 0x58, ByteOperations.CRC32(GPTBuffer, TableOffset, TableSize)); ByteOperations.WriteUInt32(GPTBuffer, HeaderOffset + 0x10, 0); ByteOperations.WriteUInt32(GPTBuffer, HeaderOffset + 0x10, ByteOperations.CRC32(GPTBuffer, HeaderOffset, HeaderSize)); return(GPTBuffer); }