Форум: "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