Ejemplo n.º 1
0
        public static MBR getMBR(byte[] bytes)
        {
            GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
            MBR      mbr    = (MBR)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(MBR));

            handle.Free();

            return(mbr);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Create MBR sector (512 bytes) with partitions specified in a parameter list
        /// </summary>
        /// <param name="partitions">List of partition descriptors</param>
        /// <returns>512 bytes array with MBR disk sector content</returns>
        public static byte[] createMBRSector(List <PartitionInfo> partitions)
        {
            byte[] result = new byte[512];

            if (partitions != null && partitions.Count > 0)
            {
                MBR mbr = new MBR(getDiskSignature());

                int idx = 0;
                foreach (PartitionInfo partition in partitions)
                {
                    // There can be only 4 primary partitions in MBR
                    if (idx >= 4)
                    {
                        break;
                    }

                    MBRPartitionEntry mbrPartition = new MBRPartitionEntry();
                    mbrPartition.partitionType          = Convert.ToByte(partition.type);
                    mbrPartition.lbaFirstSector         = partition.offsetStart;
                    mbrPartition.partitionLengthSectors = partition.length;

                    // Since CLR does not allow arrays not aligned to x4 - workaround to address particular instances
                    switch (idx)
                    {
                    case 0:
                        mbr.partition1 = mbrPartition;
                        break;

                    case 1:
                        mbr.partition2 = mbrPartition;
                        break;

                    case 2:
                        mbr.partition3 = mbrPartition;
                        break;

                    case 3:
                        mbr.partition4 = mbrPartition;
                        break;
                    }

                    idx++;
                }

                result = getBytes(mbr);
            }

            return(result);
        }