Example #1
0
 public DiskInfo(string drive)
 {
     drive       = "\\\\.\\" + drive;
     NotNTFSFlag = false;
     // Создание дескриптора файла для чтения с диска
     Drive = HandleDriveAPI.CreateFile(
         drive,
         HandleDriveAPI.GENERIC_READ,
         HandleDriveAPI.FILE_SHARE_READ | HandleDriveAPI.FILE_SHARE_WRITE,
         IntPtr.Zero,
         HandleDriveAPI.OPEN_EXISTING,
         0,
         IntPtr.Zero
         );
     if (Drive.IsInvalid)
     {
         Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
     }
     // считываем блок параметров БИОС
     BPB = new BPB(Drive);
     if (BPB.Signature != "NTFS    ")
     {
         NotNTFSFlag = true;
     }
     else
     {
         // считываем первую запись МФТ
         MFT = GetFirstMFT();
     }
 }
Example #2
0
        private unsafe byte[] _ReadSector(int sectorNum)
        {
            byte[] bytes     = new byte[Constants.BYTE_IN_SECTOR];
            IntPtr BytesRead = IntPtr.Zero;
            ulong  pointer   = (ulong)sectorNum * (ulong)Constants.BYTE_IN_SECTOR;
            int    hight     = (int)(pointer >> 32);

            HandleDriveAPI.SetFilePointer(Drive, (int)(pointer & 0xffffffff), out hight, HandleDriveAPI.EMoveMethod.Begin);

            fixed(byte *ptr = bytes)
            {
                HandleDriveAPI.ReadFile(Drive, ptr, Constants.BYTE_IN_SECTOR, BytesRead, IntPtr.Zero); // Считывание сектора
            };

            HandleDriveAPI.SetFilePointer(Drive, 0, out hight, HandleDriveAPI.EMoveMethod.Begin);

            return(bytes);
        }