Главная страница
    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.01 c
11-75135
Bartov
2003-04-05 02:58
2003.12.23
MCK 1.70 - тормозит систему


14-75321
Viktor
2003-12-01 14:42
2003.12.23
Кодировка MAC, KOI


3-75099
Alessio2003
2003-11-29 19:08
2003.12.23
Как сохранять рисунки в Paradox?


14-75386
Igorek
2003-11-27 21:15
2003.12.23
Что делать, когда все в лом?


14-75398
Бухгалтер
2003-11-28 10:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский