Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Чтение секторов на дисках 


АндрейФ.   (2002-01-10 18:40) [0]

Всем добрый день! Задача заключается в чтении секторов на дисках. Ниже приведен код, использующий функцию абсолютного чтения диска (прерывание 25).

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,StdCtrls;

...

type
PDIOCRegs=^TDIOCRegs;
TDIOCRegs=packed record
rEBX,rEDX,rECX,rEAX,rEDI,rESI,rFlags:DWORD;
end;

const
VWIN32_DIOC_DOS_INT25=2;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
hDevice : THandle;
Regs : TDIOCRegs;
Nb : DWord;
Bt : Array [1..512] of Byte;
PBt : PByte;
begin
PBt:=@Bt;
hDevice:=CreateFile("\\.\vwin32",GENERIC_READ,0,nil,
0,FILE_FLAG_DELETE_ON_CLOSE,0);
if (hDevice=INVALID_HANDLE_VALUE) then
begin
Result:=False;
Exit;
end;
Regs.rEAX:=$0003; //логический диск С
Regs.rEBX:=DWORD(PBt);
Regs.rECX:=$0001; //количество считываемых секторов
Regs.rEDX:=$0001; //номер считываемого сектора
Result:=DeviceIOControl(hDevice,VWIN32_DIOC_DOS_INT25,
@Regs,sizeof(Regs),@Regs,sizeof(Regs),nb,nil);
CloseHandle(hDevice);
end;

...

end.

Судя по Win32 Programmer"s Reference, все должно работать. При обращении к флоппи-дисководу сектора "читаются". А вот на жесткомдиске - нет (Result=False). Аналогичная картина наблюдается и при использовании функции Read Track прерывания 21.
Пожалуйста, объясните причину и подскажите, как это обойти!

Заранее благодарен!



aus   (2002-01-10 21:24) [1]

А ты не пробовал HDD с FAT16 - скорее всего будет работать, дело именно в разнице табл. размещения файлов FAT16 и FAT32.
Я экспериментировал с 13 прерыванием (в Turbo Pascal) - именно в этом была причина.



АндрейФ   (2002-01-11 14:50) [2]

Спасибо за совет, aus ©! Попробую и обязятельно сообщу результат.



Knight   (2002-01-12 13:44) [3]

Извиняюсь, тест...




Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.032 c
3-22576           Zloy                  2002-03-18 07:03  2002.04.08  
Приветствую!!! Подскажите плиз, как сделать так чтобы таблица после каждого заполнения или редактирования какого-то поля 100% сохраналась


1-22766           Dimedrol              2002-03-27 13:55  2002.04.08  
Сборщик мусора в памяти ?


14-22798          Pete                  2002-02-23 11:08  2002.04.08  
DelphiX


7-22849           SVF                   2002-01-10 20:49  2002.04.08  
Как можно определить размер файла


3-22552           Revo                  2002-03-15 15:18  2002.04.08  
Как из данные из текстовика перенести в IB5.0