Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Как прочитать boot(загрузочный)-сектор?

Delphi , ОС и Железо , Диски

Как прочитать boot(загрузочный)-сектор?

Вообще-то загрузочный сектор можно прочитать вот так:

Code:

type
TSector = array[0..511] of Byte;
var
Boot: TSector;
begin
ReadBoot(Drive, Boot);

Но учитывая разницу платформ 95, 98, Me и NT, 2000, XP можно сделать 2 процедуры, а в главной части проги вызывать необходимую:

Code:

//для 95, 98, Me
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 и есть необходимый массив.

Автор: startinger

Взято из http://forum.sources.ru

Статья Как прочитать boot(загрузочный)-сектор? раздела ОС и Железо Диски может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Диски ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 18:22:32/0.037490129470825/2