PDA

Просмотр полной версии : Как прочитать сектор диска?



droopy
26.09.2004, 04:13
Как Win32-приложение может читать диск напрямую? Я слышал, есть функция VWIN32_DIOC_DOS_INT25 для DeviceIoControl. Но она мне кажется какой-то устаревшей. Интересно, драйвера файловых систем используют её или какую-то другую?

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

Интересно, драйвера файловых систем используют её или какую-то другую?
Я так понимаю что они должны работать на ring0. Может работают напрямую, то есть через прерывания?

ЗЫ.

Я слышал, есть функция VWIN32_DIOC_DOS_INT25
Это только под Win95.

Eugie
29.09.2004, 18:06
Под NT надо смотреть Disk Management Control Codes к DeviceIoControl. Но там возможности чтения секторов кажется нет (могу ошибаться).

Да, под WinNT нет (по кр.мере, такая возможность недокументирована). Вообще, DeviceIoControl, если можно так сказать, заточена под более высокоуровневые операции. Например, можно с ее помощью делать дефрагментацию, т.е. не по отдельности читать/писать в кластеры, а перемещать за одну операцию. Почему WinNT API не дает работать с диском напрямую? Из соображений безопасности как самой NT, так, кстати, и файловой системы NTFS. Конечно, при желании любой замок можно сломать, но стоит ли? :)

Dragonfly
01.10.2004, 20:11
Смотри две вещи - исходники Filemon. Файловый монитор - фактически, прослойка между Kernel и NTFS драйвером. А затем... :) почитай сырцы линуксового NTFS драйвера (если тебя интересует аппаратный план).

droopy
02.10.2004, 04:21
Комечно, спасибо, но где же эти исходники взять?

Dragonfly
04.10.2004, 11:08
Извини, droopy, то ли здесь (под KDE) javascript глючит, то ли еще что, но писать тебе на мыло не могу. Исходники у меня есть - они маленькие, т.е. Filemon тебе поможет разве что с общими принципами написания драйвера и взаимодействия с ним, т.к. сам он дисковые операции не осуществляет, а вот Linux?овые дрова NTFS тебе полезны будут. В общем, как с тобой связаться?

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