Главная страница
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.012 c
1-75188
MuxauJl
2003-12-08 13:37
2003.12.23
Активность только окна Дэлфи


14-75371
Petrovich
2003-11-28 23:37
2003.12.23
Ссылки


4-75451
bers
2003-10-27 14:48
2003.12.23
Создание сервиса windows


14-75375
Knight
2003-11-28 20:57
2003.12.23
Простой Mail-Server для школьного кабинета информатики...


6-75290
MaG
2003-10-24 17:39
2003.12.23
SMTP сервера