Содержание материала

 

И, заодно, функция для записи:

Code:

function WriteSectors(DriveNumber: Byte; StartingSector, SectorCount: DWORD;

   Buffer: Pointer; BytesPerSector: DWORD = 512): DWORD;

var

   hFile: THandle;

   bw,TmpLo,TmpHi: DWORD;

begin

   Result := 0;

   hFile := CreateFile(PChar('\\.\PhysicalDrive'+IntToStr(DriveNumber)),

     GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

   if hFile = INVALID_HANDLE_VALUE then Exit;

   TmpLo := __Mul(StartingSector,BytesPerSector,TmpHi);

   if SetFilePointer(hFile,TmpLo,@TmpHi,FILE_BEGIN) = TmpLo then

   begin

     SectorCount := SectorCount*BytesPerSector;

     if WriteFile(hFile,Buffer^,SectorCount,bw,nil) then Result := bw;

   end;

   CloseHandle(hFile);

end;

Функции возвращает количество прочитаных (или записаных) байт. Для хранения информации о разделах объявим дополнительную структуру:

Code:

PDriveInfo = ^TDriveInfo;

TDriveInfo = record

   PartitionTable: TPartitionTable;

   LogicalDrives: array [0..3] of PDriveInfo;

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить