Форум: "Система";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
ВнизЧтение секторов в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c