Exemplo n.º 1
0
Arquivo: BPB.cs Projeto: Dreuot/Trash
        /// <summary>
        /// Чтение загрузочного сектора
        /// </summary>
        /// <returns></returns>
        private unsafe byte[] LoadBootSector()
        {
            byte[] bytes     = new byte[BYTE_IN_SECTOR]; // BOOT сектор в виде одномерного массива байтов
            IntPtr BytesRead = IntPtr.Zero;

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

            return(bytes);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Чтение произвольного сектора с диска
        /// </summary>
        /// <param name="sectorNum">Номер сектора</param>
        /// <returns>Массив байт размером BPB.BYTE_IN_SECTOR</returns>
        private unsafe byte[] _ReadSector(int sectorNum)
        {
            byte[] bytes     = new byte[BPB.BYTE_IN_SECTOR]; // сектор в виде одномерного массива байтов
            IntPtr BytesRead = IntPtr.Zero;
            ulong  pointer   = (ulong)sectorNum * (ulong)BPB.BYTE_IN_SECTOR;
            int    hight     = (int)(pointer >> 32);

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

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

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

            return(bytes);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="drive">Имя логического диска в формате C:</param>
        public NTFS(string drive)
        {
            drive = "\\\\.\\" + drive;

            // Создаем файл для чтения с диска
            Drive = HD_API.CreateFile(
                drive,
                HD_API.GENERIC_READ,
                HD_API.FILE_SHARE_READ | HD_API.FILE_SHARE_WRITE,
                IntPtr.Zero,
                HD_API.OPEN_EXISTING,
                0,
                IntPtr.Zero
                );

            BPB = new BPB(Drive); // считываем блок параметров БИОС
            MFT = GetFirstMFT();  // считываем первую запись МФТ
        }