/// <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(); }