![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение секторов в Win2000/XP [D7, Win2k, WinXP]
Terrible © (2003-10-14 14:30:00)
У кого-нибудь есть пример чтения секторов (конкретно интерсует BOOT-сектор) на Delphi в системах Win2000/XP ? Очень надо, плиз !!!
Dimaxx (2003-10-16 00:33:00) [1]
Вот тебе простой пример изврата с дискетой:
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.
Е-Моё имя (2003-10-15 14:44:00) [2]
за сутки мог и поменять { на begin
Terrible (2003-10-15 14:31:00) [3]
> Смотри функцию CreateFile. Потом полученный хэндл передашь
> в DeviceIOControl.
Это я понимаю, но меня инетресуют коды для чтения секторов через DeviceIOControl. Понимаю что всё это есть в MSDN, но во первых переводить это всё не Delphi оттуда очень тяжко, а во вторых ищё может кто видел готовые модуля или примеры (чего велосипед то изобретатть, если это кто то уже делал)
Игорь Шевченко (2003-10-15 10:37:00) [4]
CreateFile+ReadFile - пример в MSDN есть
Dimaxx (2003-10-14 23:27:00) [5]
Смотри функцию CreateFile. Потом полученный хэндл передашь в DeviceIOControl. Но эта пара функций читает диски тока по NT. Для остальных систем подход другой.