Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.007 c
3-75120
Evyshka
2003-11-28 11:49
2003.12.23
Обновление на основе двух таблиц


14-75348
Hermit
2003-11-29 20:04
2003.12.23
Ru-Board


7-75423
Eagle Owl
2003-10-15 19:00
2003.12.23
Service Application


7-75430
Terrible
2003-10-14 14:30
2003.12.23
Чтение секторов в Win2000/XP


14-75316
ИдиотЪ
2003-12-01 10:45
2003.12.23
ось





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский