public Fat16Partition(PartitionInfo info) { _info = base.info = info; diskFileName = String.Format("\\\\.\\{0}:", info.Letter); rootDirectoryName = String.Format("{0}:\\", info.Letter); bytesPerSector = GetBytesPerSector(); diskFile = new UnmanagedFile(diskFileName); byte[] fatInfo = diskFile.ReadFile((uint)bytesPerSector); fatCopiesNumber = fatInfo.AsWord(16); fatSize = fatInfo.AsWord(22); reservedAreaSize = fatInfo.AsWord(14); sectorsPerCluster = fatInfo.AsByte(13); fatAddress = reservedAreaSize; rootDirectoryEntities = fatInfo.AsWord(17); rootDirectorySector = reservedAreaSize + (fatCopiesNumber * fatSize); bitsPerSector = GetBitsNumber(bytesPerSector); bytesPerCluster = bytesPerSector * sectorsPerCluster; fatContentSize = (uint)(fatSize * bytesPerSector); fatContent = LoadFatContent(); info.FreeSpace = GetFreeDiskSpace(); currentDirectory = new FatDirectoryObject { Name = String.Empty, Type = DirectoryObjectType.Directory, Cluster = 0 }; directoryStack.Push(currentDirectory); LoadCurrentDirectoryObjects(); }
void Initialize() { int hddNumber = ...; int partitionAddress = ...; string hardDriveName = "\\\\.\\PHYSICALDRIVE" + hddNumber; diskFile = new UnmanagedFile(hardDriveName); bytesPerSector = GetBytesPerSector(); bitsPerSector = GetBitsNumber(bytesPerSector); diskFile.MovePointer(partitionAddress << bitsPerSector, partitionAddress >> (32 - bitsPerSector)); byte[] fatInfo = diskFile.ReadFile(bytesPerSector); fatCopiesNumber = fatInfo.AsWord(16); fatSize = fatInfo.AsWord(22); reservedAreaSize = fatInfo.AsWord(14); sectorsPerCluster = fatInfo.AsByte(13); fatAddress = reservedAreaSize; rootDirectoryEntities = fatInfo.AsWord(17); rootDirectorySector = reservedAreaSize + (fatCopiesNumber * fatSize); bytesPerCluster = bytesPerSector * sectorsPerCluster; fatContentSize = (uint)(fatSize * bytesPerSector); fatContent = LoadFatContent(); contents = LoadCurrentDirectoryObjects().ToList(); }
public HardDriveInfo(int hddNumber) { _number = hddNumber; _sectorSize = 0; _extendedAreaAddress = 0; string hardDriveName = "\\\\.\\PHYSICALDRIVE" + hddNumber; try { _handle = new UnmanagedFile(hardDriveName); byte[] mbr = ReadMbr(); if (mbr.AsWord(0x01fe) != 0xAA55) { throw new ErrorException("Partition is broken or not valid."); } var partitions = GetHddPartitions(mbr); if (_extendedAreaAddress != 0) { int ext = _extendedAreaAddress; _extendedAreaAddress = 0; while (true) { int nextMbrAddress = ext + _extendedAreaAddress; _handle.MovePointer(nextMbrAddress << _bitsPerSector, nextMbrAddress >> (32 - _bitsPerSector)); mbr = ReadMbr(); if (mbr.AsWord(0x01fe) != 0xAA55) { throw new ErrorException("Partition is broken or not valid."); } partitions.Concat(GetHddPartitions(mbr, nextMbrAddress)); if (_extendedAreaAddress == 0) { break; } } } Partitions = partitions; } catch (System.IO.FileNotFoundException) { Partitions = null; } }
void Initialize() { int hddNumber = ...; int partitionAddress = ...; string hardDriveName = "\\\\.\\PHYSICALDRIVE" + hddNumber; diskFile = new UnmanagedFile(hardDriveName); bytesPerSector = GetBytesPerSector(); bitsPerSector = GetBitsNumber(bytesPerSector); diskFile.MovePointer(partitionAddress << bitsPerSector, partitionAddress >> (32 - bitsPerSector)); byte[] fatInfo = diskFile.ReadFile(bytesPerSector); fatCopiesNumber = fatInfo.AsWord(16); fatSize = fatInfo.AsWord(22); reservedAreaSize = fatInfo.AsWord(14); sectorsPerCluster = fatInfo.AsByte(13); fatAddress = reservedAreaSize; rootDirectoryEntities = fatInfo.AsWord(17); rootDirectorySector = reservedAreaSize + (fatCopiesNumber * fatSize); bytesPerCluster = bytesPerSector * sectorsPerCluster; fatContentSize = (uint)(fatSize * bytesPerSector); fatContent = LoadFatContent(); contents = LoadCurrentDirectoryObjects().ToList(); }