Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.013 c
2-1133512097
MakNik
2005-12-02 11:28
2005.12.18
MessageBox


3-1130820858
Карелин Артем
2005-11-01 07:54
2005.12.18
Сколько _Recordset возвращает запрос в ADO?


4-1129262049
Wood
2005-10-14 07:54
2005.12.18
звук модема на звуковую карту


14-1132830130
TUser
2005-11-24 14:02
2005.12.18
Берем Аляску?


3-1130581620
Viktop
2005-10-29 14:27
2005.12.18
Грид не отображает данные





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский