123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Utilities;
- namespace DiskAccessLibrary
- {
- public class BasicDiskHelper
- {
- public static List<Partition> GetPartitions(Disk disk)
- {
- List<Partition> result = new List<Partition>();
- MasterBootRecord mbr = MasterBootRecord.ReadFromDisk(disk);
- if (mbr != null)
- {
- if (!mbr.IsGPTBasedDisk)
- {
- for (int index = 0; index < mbr.PartitionTable.Length; index++)
- {
- PartitionTableEntry entry = mbr.PartitionTable[index];
- if (entry.SectorCountLBA > 0)
- {
- long size = entry.SectorCountLBA * disk.BytesPerSector;
- MBRPartition partition = new MBRPartition(entry.PartitionType, disk, entry.FirstSectorLBA, size);
- result.Add(partition);
- }
- }
- }
- else
- {
- List<GuidPartitionEntry> entries = GuidPartitionTable.ReadEntriesFromDisk(disk);
- if (entries != null)
- {
- foreach (GuidPartitionEntry entry in entries)
- {
- GPTPartition partition = new GPTPartition(entry.PartitionGuid, entry.PartitionTypeGuid, entry.PartitionName, disk, (long)entry.FirstLBA, (long)(entry.SizeLBA * (uint)disk.BytesPerSector));
- result.Add(partition);
- }
- }
- }
- }
- return result;
- }
- public static Partition GetPartitionByStartOffset(Disk disk, long firstSector)
- {
- List<Partition> partitions = BasicDiskHelper.GetPartitions(disk);
- foreach (Partition partition in partitions)
- {
- if (partition.FirstSector == firstSector)
- {
- return partition;
- }
- }
- return null;
- }
- }
- }
|