Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с boot-сектором диска [D6, Win95/98]


Страницы:   1 2

DFF ©   (2004-08-08 11:34:00) 

Можно ли ТОЛЬКО средствами Windows API прочитать/записать boot-сектор диска/дискеты/Flash-карты в файл/из файла. Заранее всем огромное спасибо.


Ihor Osov'yak   (2004-08-08 17:15:00) [21]

2 Sergey Kaminski ©   (08.08.04 16:34) [3]

Это будет даже не логический диск,  а неизвестно что.. А человеку надобно физический диск.

>А премерчиком никто не поделиться?

ну так бы писал, что примерчик нужен.. А то льзя-нельзя..
Ps - Ctrl+F1 нажми на CreateFile...

а вообще зачем бут-сектор переписывать?


DFF   (2004-08-08 17:11:00) [22]

Это - то примерно понятно. А как эту структуру получить? Насколько я знаю, boot-сектора бывают разной длинны.


Sergey Kaminski   (2004-08-08 17:08:00) [23]

Смотреть структуру MBR


DFF   (2004-08-08 17:06:00) [24]

А как узнать, где именно распологается boot-сектор?


Sergey Kaminski   (2004-08-08 16:36:00) [25]

Описка, файл создавать нужно, разумеется для записи, т.е
GENERIC_WRITE


Sergey Kaminski   (2004-08-08 16:34:00) [26]

Ну, для NT примерно так.

 DiskString := Format ('\\.\%s',[DiskLetter]);
 H := CreateFile(
     PChar(DiskString),
     GENERIC_READ,
     FILE_SHARE_WRITE,
     nil,
     OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL,
     0
   );

И пиши себе, что угодно по всему диску. Только смотри, меня потом не обвиняй :)

Неплохо было бы также изучить геометрию диска, например так:


var
 IOCTL_DISK_GET_DRIVE_GEOMETRY: Cardinal;
 DiskGeometry: _DISKG_GEOMETRY;

.......

 IOCTL_DISK_GET_DRIVE_GEOMETRY :=
   GetCtlCode(FILE_DEVICE_DISK,0,METHOD_BUFFERED,FILE_ANY_ACCESS);
   Res := DeviceIoControl(
     H,
     IOCTL_DISK_GET_DRIVE_GEOMETRY,
     nil,
     0,
     @DiskGeometry,
     SizeOf(DiskGeometry),
     BytesReturned,
     nil
   );


А потом смотреть поля DiskGeoMetry:

DiskGeometry.MediaType
DiskGeometry.Cylinders.QuadPart
DiskGeometry.TracksPerCylinder
DiskGeometry.SectorsPerTrack]
DiskGeometry.BytesPerSector]

и так далее...


DFF   (2004-08-08 16:20:00) [27]

А премерчиком никто не поделиться?


Ihor Osov'yak   (2004-08-08 15:18:00) [28]

если имеется ввиду win32 api - то для NT-ряда  - да (для жесткого и флоппи, для флеш - не знаю, но вероятнее всего да). Для W9x - для HDD нет, для флоппи можно, за флеш - не знаю. Но за пределами win32 можно и для W9x (для жесткого и флоппи, для флеш - не знаю).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо