Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: CL | DM;

Вниз

Чтение секторов в Win2000/XP   Найти похожие ветки 

 
Terrible   (2003-10-14 14:30) [0]

У кого-нибудь есть пример чтения секторов (конкретно интерсует BOOT-сектор) на Delphi в системах Win2000/XP ? Очень надо, плиз !!!


 
Dimaxx ©   (2003-10-14 23:27) [1]

Смотри функцию CreateFile. Потом полученный хэндл передашь в DeviceIOControl. Но эта пара функций читает диски тока по NT. Для остальных систем подход другой.


 
Игорь Шевченко ©   (2003-10-15 10:37) [2]

CreateFile+ReadFile - пример в MSDN есть


 
Terrible   (2003-10-15 14:31) [3]


> Смотри функцию CreateFile. Потом полученный хэндл передашь
> в DeviceIOControl.


Это я понимаю, но меня инетресуют коды для чтения секторов через DeviceIOControl. Понимаю что всё это есть в MSDN, но во первых переводить это всё не Delphi оттуда очень тяжко, а во вторых ищё может кто видел готовые модуля или примеры (чего велосипед то изобретатть, если это кто то уже делал)


 
Е-Моё имя ©   (2003-10-15 14:44) [4]

за сутки мог и поменять { на begin


 
Dimaxx ©   (2003-10-16 00:33) [5]

Вот тебе простой пример изврата с дискетой:


type
MEDIA_TYPE = (Unknown,F5_1Pt2_512,F3_1Pt44_512,F3_2Pt88_512,F3_20Pt8_512,
F3_720_512,F5_360_512,F5_320_512,F5_320_1024,F5_180_512,
F5_160_512,RemovableMedia,FixedMedia);

var
H: THandle;
DG: record // Пример для 3,5" 1.44 М
Cylinders: int64; // Кол-во дорожек (80)
MediaType: MEDIA_TYPE; // Тип диска (F3_1Pt44_512)
TracksPerCylinder: cardinal; // Кол-во сторон диска (2)
SectorsPerTrack: cardinal; // Секторов на дорожку (17)
BytesPerSector: cardinal; // Байт на сектор (512)
end;

procedure TForm1.Button1Click(Sender: TObject);
var R: cardinal;
S,I: integer;
P: pointer;
begin
// Берем хендл
H:=CreateFile("\\.\A:",GENERIC_READ,0,nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
if H=INVALID_HANDLE_VALUE then Exit;
// Получим инфу о диске
DeviceIOControl(H,458752,nil,0,@DG,sizeof(DG),R,nil);
// Посчитаем размер дорожки в байтах
S:=DG.BytesPerSector*DG.SectorsPerTrack*DG.TracksPerCylinder;
// Откушаем памяти для нее
GetMem(P,S);
// Читаем дорожки
for I:=0 to pred(DG.Cylinders) do
begin
// Читаем дорожку
ReadFile(H,P^,S,R,nil);
// Тут что-то с ними делаем
end;
// Откажемся от памяти
FreeMem(P,S);
// Закроем хэндл
CloseHandle(H);
end;

Если надо читать секторы, то воспользуйся SetFilePointer с шагом DG.BytesPerSector.



Страницы: 1 вся ветка

Текущий архив: 2003.12.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
14-75307
R
2003-11-28 02:47
2003.12.23
Расспространение программы за плату.


7-75408
Ал
2003-10-20 11:41
2003.12.23
Как узнать, что система в простое и как - что вышла из него?


3-75098
Alexey V.
2003-11-29 15:31
2003.12.23
BDE или ADO...


14-75344
Great DAN
2003-11-30 00:13
2003.12.23
Как всавить музыку!


14-75362
SkyRanger
2003-12-02 02:41
2003.12.23
Халява в сети...