Как прочитать сектор диска?

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
droopy
Сообщения: 10
Зарегистрирован: 19 сен 2004, 03:55
Контактная информация:

26 сен 2004, 04:13

Как Win32-приложение может читать диск напрямую? Я слышал, есть функция VWIN32_DIOC_DOS_INT25 для DeviceIoControl. Но она мне кажется какой-то устаревшей. Интересно, драйвера файловых систем используют её или какую-то другую?
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

28 сен 2004, 11:47

Как Win32-приложение может читать диск напрямую?
И может и не может. Это зависит от платформы - WinNT или Win9x. Под NT надо смотреть Disk Management Control Codes к DeviceIoControl. Но там возможности чтения секторов кажется нет (могу ошибаться). Под 95 низкоуровневые операции с диском происходят через взаимодействие с системными VxD. Вобщем надо смотреть Platform SDK.
Интересно, драйвера файловых систем используют её или какую-то другую?
Я так понимаю что они должны работать на ring0. Может работают напрямую, то есть через прерывания?

ЗЫ.
Я слышал, есть функция VWIN32_DIOC_DOS_INT25
Это только под Win95.
*provided AS IS
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

29 сен 2004, 18:06

Под NT надо смотреть Disk Management Control Codes к DeviceIoControl. Но там возможности чтения секторов кажется нет (могу ошибаться).
Да, под WinNT нет (по кр.мере, такая возможность недокументирована). Вообще, DeviceIoControl, если можно так сказать, заточена под более высокоуровневые операции. Например, можно с ее помощью делать дефрагментацию, т.е. не по отдельности читать/писать в кластеры, а перемещать за одну операцию. Почему WinNT API не дает работать с диском напрямую? Из соображений безопасности как самой NT, так, кстати, и файловой системы NTFS. Конечно, при желании любой замок можно сломать, но стоит ли? :)
Dragonfly
Сообщения: 15
Зарегистрирован: 01 окт 2004, 18:23
Откуда: Киев

01 окт 2004, 20:11

Смотри две вещи - исходники Filemon. Файловый монитор - фактически, прослойка между Kernel и NTFS драйвером. А затем... :) почитай сырцы линуксового NTFS драйвера (если тебя интересует аппаратный план).
И накроет землю тень Армагеддона (и мы примем в этом активное участие :) )
droopy
Сообщения: 10
Зарегистрирован: 19 сен 2004, 03:55
Контактная информация:

02 окт 2004, 04:21

Комечно, спасибо, но где же эти исходники взять?
Dragonfly
Сообщения: 15
Зарегистрирован: 01 окт 2004, 18:23
Откуда: Киев

04 окт 2004, 11:08

Извини, droopy, то ли здесь (под KDE) javascript глючит, то ли еще что, но писать тебе на мыло не могу. Исходники у меня есть - они маленькие, т.е. Filemon тебе поможет разве что с общими принципами написания драйвера и взаимодействия с ним, т.к. сам он дисковые операции не осуществляет, а вот Linux?овые дрова NTFS тебе полезны будут. В общем, как с тобой связаться?
И накроет землю тень Армагеддона (и мы примем в этом активное участие :) )
droopy
Сообщения: 10
Зарегистрирован: 19 сен 2004, 03:55
Контактная информация:

09 окт 2004, 02:59

Спасибо, Dragonfly, но меня драйвера Linux не интересуют. Речь идёт о Windows. А писать мне можно на droopy@yandex.ru.
Как я понял, общая идея чтения/записи дисков в Windows (для пользовательского режима) состоит в использовании CreateFile("\\.\C:"...) и последующих ReadFile/WriteFile. Но что-то здесь маловато контроля, хотелось бы иметь больше. А драйвера вообще непонятно как с диском работают. Ведь есть же какой-то драйвер самого жёсткого диска, и есть у него интерфейс с внешним миром. Только вот какой?
Ответить