Программа поиска в свободных кластерах символьных последовательностей из заданного набора

Автор работы: Пользователь скрыл имя, 05 Апреля 2011 в 18:19, курсовая работа

Описание работы

В данной курсовой работе необходимо разработать программу для поиска в свободных кластерах символьных последовательностей из заданного набора.

Файлы: 1 файл

Курсач_СПО.(готов).doc

— 756.50 Кб (Скачать файл)

                    if (WriteRes)

                    

                        //Позиционирумся обратно на сектор, где находится длина файла

                        PositionRes = Win32API.SetFilePointer(Disk.cHDevice, L32Bytes, out H32Bytes, 0);

                        if(!(PositionRes==Win32API.INVALID_SET_FILE_POINTER && Win32API.GetLastError()!=0))

                        {

                            //Изменяем обратно длину файла на положенную

                            lpBuffer[_PositionByte] = BitConverter.GetBytes(_SizeFile)[0];

                            lpBuffer[_PositionByte+1] = BitConverter.GetBytes(_SizeFile)[1];

                            lpBuffer[_PositionByte+2] = BitConverter.GetBytes(_SizeFile)[2];

                           lpBuffer[_PositionByte+3] = BitConverter.GetBytes(_SizeFile)[3];

                            //Переписываем ранее измененный сектор на оригинал

                            WriteRes = Win32API.WriteFile(_Disk.cHDevice, lpBuffer, 512, out pNumberOfBytesWrite, IntPtr.Zero);

                            _Disk.CloseDrive();//Закрываем диск, чтобы изменения немедленно вступили в силу

                            _Disk.OpenDrive();

                            if (!WriteRes)

                                _Error = _Error |128;

                        }

                        else

                            _Error = _Error | 64;

                    }

                    else

                        _Error = _Error | 32;

                }

                else

                    _Error = _Error | 16;

                #endregion

            }

        }

        public uint Error

        {

            get { return _Error; }

        }

        public string Status

        {

            get{if(_Error==0) return "OK"; else return "Error";}

        }

        public FileInfo File

        {

            get { return _File; }

        }

        public uint SizeSlack

        {

            get { return _SizeSlack; }

        }

        public uint SizeFile

        {

            get { return _SizeFile; }

        }

        public uint SizeFileClusters

        {

            get { return _SizeFileClusters; }

        }

        public byte[] Slack

        {

            get { return _Slack; }

        }

    }

} 
 
 
 
 
 
 
 
 
 
 
 
 
 

LogicalDrive.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.Win32.SafeHandles; 

namespace HiddenLost

{

     public class LogicalDrive

    {

        uint _BytesPerSector = 0;// Байт в секторе

        uint _SectorsPerCluster = 0;// Секторов в кластера

        uint _SectorsPerFAT = 0;// Секторов в FAT

        uint _CopiesFAT = 0;// Число FAT

        uint _RootEntries = 0;// Записей в коренвом каталоге

        uint _TotalSize = 0;// Размер тома

        uint _ReservedSectors = 0;// Зарезервированно секторов

        SafeFileHandle _cHDevice = null; //Handle логического диска для доступа функций

        string _Name;// Буква логического диска

        byte[] _CopyBR;// Копия загрузочного сектора BR

        ulong _TypeSystem;// Тип файловой системы

        public LogicalDrive(string Name)

        {

            _Name = Name;

            _cHDevice = Win32API.CreateFile(new StringBuilder("\\\\.\\"+Name), Win32API.GENERIC_READ | Win32API.GENERIC_WRITE, Win32API.FILE_SHARE_WRITE|Win32API.FILE_SHARE_READ, IntPtr.Zero, Win32API.OPEN_EXISTING, Win32API.FILE_FLAG_BACKUP_SEMANTICS|Win32API.FILE_FLAG_NO_BUFFERING|Win32API.FILE_FLAG_WRITE_THROUGH, IntPtr.Zero);

           

            if(_cHDevice.IsInvalid==false)

            {

                _CopyBR = new byte[512];

                UInt32 pNumberOfBytesRead;

                //Чтение BR

                bool ReadRes = Win32API.ReadFile(_cHDevice, _CopyBR, 512, out pNumberOfBytesRead, IntPtr.Zero);

                if(ReadRes == true)

                {

                    //Инициализация внутренних переменных значениями из BR

                    _BytesPerSector = BitConverter.ToUInt16(_CopyBR, 11);

                    _SectorsPerCluster = (uint)_CopyBR[13];

                    _TotalSize = BitConverter.ToUInt16(_CopyBR, 19) + BitConverter.ToUInt32(_CopyBR, 32);

                    _SectorsPerFAT = BitConverter.ToUInt16(_CopyBR, 22);

                    _CopiesFAT = _CopyBR[16];

                    _RootEntries = BitConverter.ToUInt16(_CopyBR, 17);

                    _ReservedSectors = BitConverter.ToUInt16(_CopyBR, 14);

                    _TypeSystem = BitConverter.ToUInt64(_CopyBR, 54);

                    _TypeSystem = _TypeSystem & 0xFFFFFFFFFF;

                }

                else

                    _Error = _Error | 2;

            }

            else

                _Error = _Error | 1;

Информация о работе Программа поиска в свободных кластерах символьных последовательностей из заданного набора