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

Code:

//

type

  TDiocRegisters = record

    EBX, EDX, ECX, EAX, EDI, ESI, Flags: LongWord end;

 

  TVWin32CtlCode = (ccNone, ccVWin32IntIoctl, ccVWin32Int25,

    ccVWin32Int26, ccVWin32Int13);

 

function VWin32(CtlCode: TVWin32CtlCode;

  var Regs: TDiocRegisters): Boolean; // вспомогательная процедура

var

    Device: THandle;

    Count: LongWord;

  begin

  Device := CreateFile('\.\VWIN32', 0, 0, nil, 0,

    FILE_FLAG_DELETE_ON_CLOSE, 0);

  if Device = INVALID_HANDLE_VALUE then

    raise Exception.Create(SysErrorMessage(GetLastError));

  try

    Result := DeviceIoControl(Device, Ord(CtlCode), @Regs,

      SizeOf(Regs), @Regs, SizeOf(Regs), Count, nil);

  finally

    CloseHandle(Device) end end;

 

//само чтение

procedure ReadBoot95(Drive: Char; var Boot: TSector);

  var

    Regs: TDiocRegisters;

  begin

  with Regs do begin

    EAX := Ord(UpCase(Drive)) - Ord('A');

    EBX := LongWord(@Boot);

    ECX := 1;

    EDX := 0 end;

  if not VWin32(ccVWin32Int25, Regs) then

    raise Exception.Create(SysErrorMessage(GetLastError)) end;

 

//для NT, 2000, XP попроще

type

  TSector = array[0..511] of Byte;

procedure ReadBootNT(Drive: Char; var Boot: TSector);

  var

    BytesRead: Cardinal;

    H: THandle;

  begin

  H := CreateFile(PChar(Format('\.\%s:', [UpCase(Drive)])),

    GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  if H = INVALID_HANDLE_VALUE then

    raise Exception.Create(SysErrorMessage(GetLastError));

  try

    if not ReadFile(H, Boot, SizeOf(Boot), BytesRead, nil)then

      raise Exception.Create(SysErrorMessage(GetLastError));

  finally

    CloseHandle(H) end end;

 

// а юзать так

 

var

    Boot: TSector;

  begin

  case Win32Platform of

    VER_PLATFORM_WIN32_WINDOWS:

      ReadBoot95(Drive, Boot);

    VER_PLATFORM_WIN32_NT:

      ReadBootNT(Drive, Boot) end;

 

 

Boot и есть необходимый массив.

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

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

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

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


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