Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Работа с винчестером напрямую   Найти похожие ветки 

 
Tristania ©   (2005-10-15 19:47) [0]

Доброго времеи суток, господа!
Не знал куда разместить этот пост, поэтому расположил сюда(по железу отдельной ветки, вроде бы нет).
Подскажите, кто знает какие-нибудь методы для чтения/записи секторов винчестера из своей программы. В ДОС все это выполняло 13-е прерывание БИОСа, а как можно это реализовать в Винде? Особый интерес представляет ВинНТ/ХР/2000.

Если кто знает - подскажите, это для добрых целей и хотелось бы узнать по-больше методов.
Заранее всем благодарен.


 
Tristania ©   (2005-10-15 19:57) [1]

Хех, ну АПИ, так АПИ.
В дополнение хочу сказать вот что: как работать с винтом из-под:
- обычных приложений;
- консольных и приложений ДОС (если это возможно);
- и чем мне может помочь написание драйвера нулевого кольца.


 
Kerk ©   (2005-10-15 20:08) [2]

http://kladovka.net.ru/index.cgi?pid=article&rid=1


 
Tristania ©   (2005-10-15 20:54) [3]

Спасибо. Один вариант есть. Нашел пока по IDE портам и DMA. Изучаю. Еще есть идеи?


 
Eraser ©   (2005-10-15 21:16) [4]


> Tristania ©   (15.10.05 20:54) [3]


>  Еще есть идеи?

Для полноценной работы в данном случае надо драйвер ядра делать.


 
Tristania ©   (2005-10-15 21:47) [5]

Дело в том, что изначальная задача несколько другая.
Мне нужно написать прогу, которая будет перехватывать обращения других прог к винчестеру(к его секторам, etc) и при необходимости делать редирект.
Поэтому, я решил сначала узнать по-больше возможных способов работы с винтом, а уж потом писать перехватчики.
Вот так....сорри за каламбур.


 
Eraser ©   (2005-10-15 22:25) [6]


> Tristania ©   (15.10.05 21:47) [5]

Ну тогда почти 100% драйвер писАть надо. Загляни на сайт http://www.sysinternals.com/ и глянь программу Filemon. Примерно такое интересует?


 
wp2   (2005-10-15 22:27) [7]

int 13h

Правда это не API...


 
Anatoly Podgoretsky ©   (2005-10-15 22:32) [8]

Это АПИ, но только ДОС


 
Alex Konshin ©   (2005-10-16 00:34) [9]

Tristania ©   (15.10.05 21:47) [5]
Перехватывать обращения к файлам? Тогда драйвер IFS.
Накой черт может понадобиться перехват чтения секторов я ума не приложу.
Это дурно пахнет.


 
Tristania ©   (2005-10-16 15:18) [10]

Перехват не только секторов, но еще и форматирование...


 
Eraser ©   (2005-10-16 18:37) [11]


> Tristania ©   (16.10.05 15:18) [10]
>
> но еще и форматирование...

SHFormatDrive + F1


 
Tristania ©   (2005-10-16 20:40) [12]

Это-то все понятно....
Спасибо, конечно, но как ты наверное понял, это все АПИ. Т.е. уровень не самый низкий и если чья-нибудь прога задумает совершить действия с винтом минуя АПИ(через тот же АПИ интерфейс), то я уже бду не в силах чем-то ей помешать.
Но задача для меня уже не такая страшная. Я вот тут начитался, что можно написать драйвер-перехватчик DRx регистров и теперь буду рулить в этом направлении. Так что ребята, спасибо всем, кто попытался помочь. Дальше уже сам.
Ветку можно считать закрытой.


 
Tristania ©   (2005-10-16 20:42) [13]

Сорри, не АПИ в скобках быть должно было а IDE.


 
Eraser ©   (2005-10-16 20:51) [14]


> прога задумает совершить действия с винтом минуя АПИ(через
> тот же АПИ интерфейс), то я уже бду не в силах чем-то ей
> помешать.

см. Alex Konshin ©   (16.10.05 00:34) [9]

Система драйверов windows имеет слоистую структуру, т.е. можно перехватывть что угодно, при желании, просто нужный фильтр-драйвер устанавливать непосредственно перед драйвером, IRP запросы  которого необходимо перехватить.

В большенстве случаев есть готовые решения, опять же см. [9] и http://www.sysinternals.com/


 
Tristania ©   (2005-10-17 12:52) [15]

Спасибо, Eraser.
Но дело в том, что в англ. я не силен, а нет ли где почитать на Ридний Мови?


 
Tristania ©   (2005-10-17 13:08) [16]

Скачал DiskMon, вроде бы то, что нужно(хотя не уверен, что он перехватывает все), но исходного текста нет, также как и дукументации о том, как все это работает.
Кстати, там только ЕХЕ-файл. Может ли он быть и драйвером? Вряд ли. Т.е. прога видимо переходит в нулевое кольцо без драйвера....но это так, лирическое отступление.


 
Игорь Шевченко ©   (2005-10-17 13:31) [17]

Tristania ©   (17.10.05 13:08) [16]


> Т.е. прога видимо переходит в нулевое кольцо без драйвера.
> ...


Нет, она загружает свой драйвер.


 
Tristania ©   (2005-10-17 13:41) [18]

Спасибо, Игорь. А не подскажешь, где можно почитать про применение отладочных регистров? Желательно, конечно, приминительно к моей задаче....


 
Idx ©   (2005-10-17 14:00) [19]

Когда – то я занимался дисковой системой, это было лет 5 назад.

Были свои модули и драйвера, а также мониторинги, но этого уже нет.

Все что я могу посоветовать это постоянное сканирование портов I/O
по 1Fx/17x это базовые порты ATA и ATAPI хотя чаще всего применяются
для ATA, но по значению ты можешь свободно определить какая операция
выполняется и с каким диском.

Для примера работы с портами ввода / вывода, а точнее дисковыми
ты можешь найти на сайте http://AinCity.narod.ru


 
Tristania ©   (2005-10-17 14:43) [20]

Ты имеешь ввиду постоянное сканирование из-под драйвера? А успеет ли моя прога там что-то изменить при необходимости? Ну например, запретить какому-то приложению запись в загрузочный сектор таким образом?


 
Eraser ©   (2005-10-17 14:45) [21]


> Tristania ©   (17.10.05 13:08) [16]

На sysinternals.com есть ряд программ с открытым исходным кодом.
см. http://www.sysinternals.com/SourceCode.html


 
Tristania ©   (2005-10-17 14:52) [22]

Да, есть такое, но ничего по моей теме там нет. Точнее по самой теме(subj) есть, но хотелось бы что-то поближе к DiskMon"у, т.е. о перехвате.


 
Игорь Шевченко ©   (2005-10-17 15:01) [23]

Tristania ©   (17.10.05 13:41) [18]

А каким образом отладочные регистры помогут в этой задаче ? Я вот честно не понимаю.


 
Tristania ©   (2005-10-17 15:05) [24]

Если я все правильно понял(пока еще изучаю), то через них можно настроить обработчик исключения при обращении к портам I/O и тем самым перехватить то, что в них будет записано. А порты ввода/вывода кажись и есть самый низкий уровень работы с винтом, так что можно надеяться на полный перехват.
Может я что-то напутал, но вроде все так.


 
Eraser ©   (2005-10-17 15:10) [25]


> Tristania ©   (17.10.05 15:05) [24]

Советую купить книжку по написанию драйверов, вот эту http://www.my-shop.ru/shop/books/47027.html хотя бы. Есть ещё несколько неплохих книг, + изучай справку из DDK.


 
Tristania ©   (2005-10-17 15:45) [26]

Спасибо, уже заказал :)


 
Idx ©   (2005-10-17 17:34) [27]

Tristania

Запомни одно! При записи в порты всегда есть задержка
благодаря этому ты сможешь обнулить команду.

Пример записи сектора :  (Кусок кода  из моего модуля)

   ATAFeatures     := 0;
   ATAAdressMode   := 1;
   ATASectorCount  := nSector;
   ATASectorNumber := Sector and $FF; ;
   ATACylinder     := (Sector shr 8) and $FFFF;;
   ATAHead         := Sector shr 24;
   ATACommand      := $30;
   -------------------------------------------------------------------
   ЭТО УНИВЕРСАЛЬНАЯ Ф-ЦИЯ!
   В  блоке этой ф-ций  задержка  составляет 20 мк.
   SendCommandToHDD(CmdHddPacked);
   -------------------------------------------------------------------

   // Проверить код ошибки
   IF DevErrorCode <> 0 Then
   BEGIN
       Result:=True;
       ErrorCode;
       Exit;
   END;

   CurrentChannel:=ATABasePortAddr+7;
В это ф-ций проходит цикл  пока  порт не освободится
в это время проходит время и если оно превосходит 10-сикунд
тогда таймаут! Естественно в ней контролируется и другие ошибки
например: Сектор заданным адресом не найдет или  поврежден …
   IF HddWaitCompleet(True) THEN
   Begin
      Result:=True;
      EXIT;
   end;
---------------------------------------------------------------------
   CurrentChannel:=ATABasePortAddr;
   For i := 0 to 255 do
   OutPortW(CurrentChannel,Buf256_HDDID[i]);
  END;
 end;

Главное не успеть, а сделать правильно!

Мой мониторинг просто просматривал команду
и если команда принадлежит к “O”  то я просто
сбрасывал  контролер жесткого диска, а также
делал резервную  копию сектора для  надежности
затем записывал его туда куда указывала команда.

Я тебе рассказал достаточно информаций  
что бы самому в  этом разобраться.


Eraser ©   (17.10.05 15:10) [25]
Книга также доступно электроном варианте.
http://ms-rem.dot-link.net/stuff/soldatov/content.html


 
Eraser ©   (2005-10-17 17:39) [28]


> Idx ©   (17.10.05 17:34) [27]

Спасибо за ссылочку. В печатном виде у меня есть, но иногда удобнее в эл. виде.


 
Tristania ©   (2005-10-17 19:23) [29]

Тут вот в Инете попались комментарии об этой книге. Там говорят, что в книге настолько много ошибок в исходных кодах, что лучше их не использовать. Это так?


 
Eraser ©   (2005-10-17 19:38) [30]


> Tristania ©   (17.10.05 19:23) [29]

В первой редакции были, во второй может есть.
В этой книге всего 1 полноценный пример! зато теория очень доходчиво изложена, подробно описаны базовые функции. Книгу советую.


 
Tristania ©   (2005-10-17 19:52) [31]

Ок. Всем спасибо за помощь. Пойду искать протоколы работы с винтом через порты ввода/вывода и пора бы уже начинать драйвер писать :)


 
Alex Konshin ©   (2005-10-17 23:36) [32]

А чего их искать? для IDE смотри http://www.t13.org/


 
Idx ©   (2005-10-18 07:00) [33]

Tristania ©   (17.10.05 19:52) [31]
Пример драйвера на DELPHI:
http://forum.sources.ru/index.php?showtopic=115758


 
Игорь Шевченко ©   (2005-10-18 10:34) [34]

Tristania ©   (17.10.05 19:52) [31]


> Пойду искать протоколы работы с винтом через порты ввода/вывода
> и пора бы уже начинать драйвер писать


Я очень извиняюсь, а нафига ? Путь гландам лежит не через задницу, а через рот, соответственно, путь к работе с винтом лежит через функции CreateFile, ReadFile, Writefile, DeviceIoControl


 
Tristania ©   (2005-10-19 16:26) [35]

Да, Игорь. Но таким образом мне не удасться перехватить всю работу с винтом. Т.к. драйвер или прога сможет обратиться к нему через порты и весь перехват накроется...
А за ссылки, большое спасибо


 
Игорь Шевченко ©   (2005-10-19 16:32) [36]


> Мне нужно написать прогу, которая будет перехватывать обращения
> других прог к винчестеру(к его секторам, etc) и при необходимости
> делать редирект.


Мониторинг обращения к портам тебе в этом случае не поможет. Никаким образом. По сути тебе надо написать некий аналог драйвера логического диска, а он с портами не работает, он работает с драйвером физического диска, обмениваясь пакетами. Тоже самое, чем занимается, например драйвер поддержки зеркалирования и т.д.



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.052 c
2-1133178578
alexproger
2005-11-28 14:49
2005.12.18
Проблема с контруктором


3-1130736135
chsv
2005-10-31 08:22
2005.12.18
Не выполняется удаление из Access через ADO


2-1133373765
dimka_sh
2005-11-30 21:02
2005.12.18
ADO - ConnectionString


14-1133169476
Жук
2005-11-28 12:17
2005.12.18
Просмотр телевидения (почти опрос)


4-1129201519
Archer84
2005-10-13 15:05
2005.12.18
Выделенные объекты