Автор работы: Пользователь скрыл имя, 05 Апреля 2011 в 18:19, курсовая работа
В данной курсовой работе необходимо разработать программу для поиска в свободных кластерах символьных последовательностей из заданного набора.
if (WriteRes)
//Позиционирумся обратно на сектор, где находится длина файла
PositionRes = Win32API.SetFilePointer(Disk.
if(!(PositionRes==Win32API.
{
//Изменяем обратно длину файла на положенную
lpBuffer[_PositionByte] = BitConverter.GetBytes(_
lpBuffer[_PositionByte+1] = BitConverter.GetBytes(_
lpBuffer[_PositionByte+2] = BitConverter.GetBytes(_
lpBuffer[_PositionByte+3] = BitConverter.GetBytes(_
//Переписываем ранее измененный сектор на оригинал
WriteRes = Win32API.WriteFile(_Disk.
_Disk.CloseDrive();//Закрываем диск, чтобы изменения немедленно вступили в силу
_Disk.OpenDrive();
if (!WriteRes)
}
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|Win3
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;