Exemple #1
0
        /// <summary>
        /// Refreshes the device.
        /// </summary>
        public void Refresh()
        {
            if (deviceStream == null)
            {
                return;
            }

            logicalDevices = null;
            ArrayList logicalDeviceList = new ArrayList();

            deviceStream.Seek(0, SeekOrigin.Begin);
            BinaryReader br = new BinaryReader(deviceStream);

            // Read the MBR
            byte[] sector = br.ReadBytes(SectorSize);
            // Failsafe .. be sure MBR is vaild
            if ((sector[0x01FE] != 0x55) || (sector[0x01FF] != 0xAA))
            {
                Console.WriteLine("Corrupt MBR; exiting");
                return;
            }

            // Partition table
            int p = 0x01BE;   // Beginning of partition table

            for (int i = 0; i < 4; i++, p += 16)
            {
                PartitionTable partition = (PartitionTable)StreamActivator.CreateInstance(typeof(PartitionTable), sector, p);
                if (partition.SysId == 0)
                {
                    continue;
                }
                logicalDeviceList.Add(new LogicalDevice(this, partition));
            }

            logicalDevices = (LogicalDevice[])logicalDeviceList.ToArray(typeof(LogicalDevice));
        }
 public LogicalDevice(PhysicalDevice owner, PartitionTable partition)
 {
     this.physicalDevice = owner;
     this.partition      = partition;
     Refresh();
 }