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