HARDW.net
Все о компьютерном "железе"

 
Реклама:

Внимание: Это версия форума за период с сентября 2003г по сентябрь 2005г, предназначенная для чтения в оффлайне

Наш форум доступен по адресу: http://www.hardw.net/forum

Код операции IOCTL_ATA_PASS_TROUGH_DIRECT в DeviceIOControl

 
Список форумов HARDW.net -> Программирование компьютерного "железа"
Автор Сообщение
Drauger
Откуда: г. Ярославль
Добавлено: Чт Окт 02, 2003 2:28 pm  

Если кто знает код данной операции, плиз сообщите на мыло, или если есть, то рабочую ссылку на Windows XP SP1 DDK последней версии или файл ntddscsi.h из оного. :!:
Sergant

Добавлено: Пт Окт 03, 2003 9:02 am  

ни как по SCSI чего-то пишешь?
Sergant

Добавлено: Пт Окт 03, 2003 11:42 am  

Действительно штука прикольная.

Послал запрос знакомому из МелкоМягких.

Если пришлет с тебя грамотно организованный вызов.
Drauger
Откуда: г. Ярославль
Добавлено: Пт Окт 03, 2003 4:16 pm  

Насчет вызова - проблем нет, есть документация и структуры, которые послать надо на вход и выход, есть процедура инициализации(писал на основе примера из ДДК), которая видит все винты в системе и выдает HANDLE каждого. Есть опыт использования IOCTL_IDE_PASS_TROUGH. Так что вызов могу обеспечить. :wink:

P.S. Задолбало искать по нету сей DDK - бывало до слез в глазах перед монитором сидел. СВ этот мелкософт. :evil:
Sergant

Добавлено: Пт Окт 03, 2003 4:50 pm  

Дык, а через порты-то можно достучаться. Т.е. есть доступ к портам встроенными средствами, али нужно в ring0 по хитрому залезать?
неохода дрова писать для двух операций _inp, _outp.
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 06, 2003 8:10 am  

Напрямую в порты под Win NT нельзя достучаться, т.к. там все они заняты IOS(Input Output System), через которую работают все дрова. Дрова еще тоже могут быть разные и к портам напрямую могут обращаться только те из них, что работают в так называемом Kernel Mode, попасть в который можно только при загрузке винды. Отсюда вариантов два - либо писать драйвер, и все делать через него (посылая к нему запросы при помощи DeviceIOControl), либо использовать готовый стандартный запрос IOCL_ATA_PASS_TRUOGH, поддержка которого ДОЛЖНА БЫТЬ во всех IDE дровах по требованию Microsoft, так что, по-моему, незачем изобретать велосипед. Подобной поддержки, насколько я знаю нет только в дровах к NForse 2.03 и ниже. Проблема только (как, впрочем, и обычно) в отношении мелкософта к потребителю: раньше DDK можно было скачать бесплатно, а теперь - либо подписка MSDN (минимум 200 у.е. в год), либо "БЕСПЛАТНЫЙ" диск, за доставку которого надо заплатить 25 у.е.
Sergant

Добавлено: Пн Окт 06, 2003 9:14 am  

Кернел и дрова- это просто нулевой уровень привелегий.

Вопрос- можно ли найти локальный дискриптор нашей программы?
Или хотя бы таблицу, где он описан?

Дальше можно(как я думаю) либо повысить уровень привелегий самой проги(пока представляю с трудом и думаю, что НТ не позволит), либо пропатчить bytmap карту привелегий доступа к портам(вот тут я думаю она сломается), для данной таблицы.(как пить дать вся таблица будет содержать проги с 3-тим уровнем привелегий)

Главное, чтобы у антивируса крышу не снесло :lol:
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 06, 2003 10:25 am  

Работа с безопасностью под NT пока еще вне моей компетенции, покопаюсь в нете. Ты полагаешь, что если заменить или изменить Security descriptor проги, то она получит доступ к портам в обход дров и IOS?
P.S. Посмотрел в MSDN - кое что наклевывается.
Sergant

Добавлено: Пн Окт 06, 2003 10:32 am  

почитай здесь
http://z0mbie.host.sk/ntoskrnl.html

Вообще-то ребята вирусы пишут, но можно их старания и в мирных целях использовать;-)
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 06, 2003 11:13 am  

Спасибо за ссылку! Черезвычайно ценная инфа. Из того, что я понял с моим знанием ASM - взломать винду можно через одно прерывание с привилегией 3! :shock:
Попробую в течение этой недели(работа давит).Если получится, пришлю исходник.
Что все-таки насчет кода IOCTL_ATA_PASS_TROUGH_DIRECT? Как поживает знакомый из мелкософта?
Sergant

Добавлено: Пн Окт 06, 2003 11:22 am  

Нее, это не взлом, а использование встроенных сервисов из третьего кольца(а больше и не надо ничего:-))

; ---------- service name ------------- --index-- stk-size #params
; (hex) (dec)
i2E_READ_PORT_BUFFER_UCHAR equ 000000EEh ; 0C 3
i2E_READ_PORT_BUFFER_ULONG equ 000000EFh ; 0C 3
i2E_READ_PORT_BUFFER_USHORT equ 000000F0h ; 0C 3
i2E_READ_PORT_UCHAR equ 000000F1h ; 4 1
i2E_READ_PORT_ULONG equ 000000F2h ; 4 1
i2E_READ_PORT_USHORT equ 000000F3h ; 4 1
i2E_WRITE_PORT_BUFFER_UCHAR equ 000000F4h ; 0C 3
i2E_WRITE_PORT_BUFFER_ULONG equ 000000F5h ; 0C 3
i2E_WRITE_PORT_BUFFER_USHORT equ 000000F6h ; 0C 3
i2E_WRITE_PORT_UCHAR equ 000000F7h ; 8 2
i2E_WRITE_PORT_ULONG equ 000000F8h ; 8 2
i2E_WRITE_PORT_USHORT equ 000000F9h ; 8 2



".....
Короче говоря, можно вызывать INT 2E из PE файлов одним из следующих способов:

; 1.
mov eax, service-number
lea edx, stk
int 2Eh

stk: dd param1
dd param2
dd param3
...

...."

Короче надо пробывать. А если получиться , то и драйвера нах... не нужны;-)
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 06, 2003 11:48 am  

Это понятно, но возникает другой вопрос.
Дело в том, что я начал писать прогу под XP из-за того, что хотел ускорить работу по проверке винтов, используя DMA через драйвер (IOCTL_ATA_PASS_TROUGH_DIRECT как раз это позволяет).
Прямой доступ к портам поможет сменить Firmware, дать недокументированную команду, остановить шпиндель и т.д., но при работе с данными( то есть та же проверка на бэды больших винтов) такой доступ ограничен только PIO (придется передавать данные через регистр Data, который к тому же 16-ти битный). Получается долго.
Возможно стоит рассмотреть гибридный вариант, то есть проверка на бэды через DeviceIOControl, а специфические функции, для которых скорость не критична, реализовать через INT 2E.
Еще одна проблема - возможные глюки в связи с тем, что винда постоянно мониторит партишены и что - нибудь на них пишет, читает и Т.Д. Нужно делать dismunt винта, но тогда к нему не достучаться через handle. Необходимо подключится к нему эксклюзивно, но так подключится можно только к партишену( я пробовал - забавные вещи получаются), так что , чувствую, придется смотреть все партишены на винте и ко всем делать эксклюзивный доступ.
Sergant

Добавлено: Пн Окт 06, 2003 12:06 pm  

Думаю, надо дизеблить секондари контроллер и работать с портами, во избежании глюков.
К тому же для работы с исправными винтами уже куча прог написанна.

А вот копировать винт, который через пару часов зависнет на каком-нибудь треке и ему придеться делать АТА-резет или резет через LPT порт (тут уже с IDE шлейфом придеться поработать) или через тот же LPT отключать- включать питание....

Короче, вся эта ботва нужна только, чтобы было приятно работать, пощелкивая мышой в оконном интерфейсе, а не париться с прописыванием INI файлов в ДОС прогах;-)

Я из-за удобства даже напрягся и MFC начал изучать;-)
http://repair.vist-v.ru/i2c/i2c.html
Sergant

Добавлено: Пн Окт 06, 2003 12:16 pm  

Думаю, надо дизеблить секондари контроллер и работать с портами, во избежании глюков.
К тому же для работы с исправными винтами уже куча прог написанна.

А вот копировать винт, который через пару часов зависнет на каком-нибудь треке и ему придеться делать АТА-резет или резет через LPT порт (тут уже с IDE шлейфом придеться поработать) или через тот же LPT отключать- включать питание....

Короче, вся эта ботва нужна только, чтобы было приятно работать, пощелкивая мышой в оконном интерфейсе, а не париться с прописыванием INI файлов в ДОС прогах;-)

Я из-за удобства даже напрягся и MFC начал изучать;-)
http://repair.vist-v.ru/i2c/i2c.html


Да и вообще всё это тлен;-)

Надо брать МК со встроенными USB и АТА, шить в него все коды и спокойно работать.
Подал команду и от компа отключил- пущай МК сам потихоньку головками на винте стучит.
Цепанул следущий- продолжаешь работать.
Так можно целую стойку для работы с винтами сделать;-)
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 06, 2003 1:44 pm  

По сравнению с тобой я еще в начальной стадии копания винтов и премудрости пайки мне тоже пока (я надеюсь) недоступны. Но ты прав - все это началось для меня именно с удобства. Хотелось упростить и ускорить работу. Пошел вот таким путем. Иду по мере возможности (в час - по чайной ложке) к универсальному приложению. HDDL.EXE у меня тоже есть, и инит к нему написать несложно, но в винде подкупает многозадачность и все то же пресловутое удобство. Все это и в Линухе есть, но изучать новю операционку - нет времени, если всю жизнь в виндюке провозился, да еще и работа. Поэтому пока иду путем наименьшего сопротивления из-за недостатка времени.:(
А насчет какого МК ты писал?
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 06, 2003 1:45 pm  

По сравнению с тобой я еще в начальной стадии копания винтов и премудрости пайки мне тоже пока (я надеюсь) недоступны. Но ты прав - все это началось для меня именно с удобства. Хотелось упростить и ускорить работу. Пошел вот таким путем. Иду по мере возможности (в час - по чайной ложке) к универсальному приложению. HDDL.EXE у меня тоже есть, и инит к нему написать несложно, но в винде подкупает многозадачность и все то же пресловутое удобство. Все это и в Линухе есть, но изучать новю операционку - нет времени, если всю жизнь в виндюке провозился, да еще и работа. Поэтому пока иду путем наименьшего сопротивления из-за недостатка времени.:(
А насчет какого МК ты писал?
Sergant

Добавлено: Пн Окт 06, 2003 2:21 pm  

например AT89C5132

64к flash, 2k-ram, USB,ATA

Причем, т.к. быстродействие по USB нафиг не нужно, можно работать в HID(драйвера писать не нужно-цепанул и винда сама устройство нашла)

4к отданно под бутлоадер и отладчик.
меньше 1к будет работа с USB.
Останеться 59к для собственного кода-это больше чем за глаза;-)

Причем, на такой штуке легко сделать АТА-сканер и подглядывать за новыми апдейтелками;-)
Drauger
Откуда: г. Ярославль
Добавлено: Вт Окт 07, 2003 8:08 am  

И, всетаки, по существу вопроса: можно или нет достать код операции? :(
Drauger
Откуда: г. Ярославль
Добавлено: Вт Окт 07, 2003 8:34 am  

Насчет контроллера - идея классная, но как быть с достопочтенным ДОС'ом?
Sergant

Добавлено: Вт Окт 07, 2003 8:55 am  

Чувак из мелкомягких пока молчит.:-(

А зачем тебе дос?

Сидишь в инете, почту читаешь, в игрушки играешь..., а винт(винты) в это время тестятся, копируются...
Идея в том, чтобы комп не занимать из-за одного винта.
По моим подсчетам законченный девайс будет стоить порядка 150$ (для покупателя). Причем на два винта. А это дешевле компа.
Drauger
Откуда: г. Ярославль
Добавлено: Вт Окт 07, 2003 9:43 am  

Насчет кода - я подожду, главное - результат.
А по поводу контроллера - вопрос с ДОС'ом важен по той причине, что юольшинство апдейтилок пока еще под ним ходят и винду не любят жутко. Или эмуляция (VMWare и т.д.) помогает?
Sergant

Добавлено: Вт Окт 07, 2003 9:51 am  

:lol:

нет проблем.
На одной машине запускаешь апдейт, другой машиной смотришь поток.
Drauger
Откуда: г. Ярославль
Добавлено: Чт Окт 09, 2003 5:20 pm  

Нашел схему контроллера http://radiotech.by.ru/Shematic_PCB/Computers/usb-hdd.html
Попробую спаять.Может выйдет че. :?:
Насчет кода - намыль, плиз, как проснется товарищ из мелкософта. :wink:
Sergant

Добавлено: Пт Окт 10, 2003 9:10 am  

А прошивку контроллера будешь сам лопатить?

Там наверняка стандартные процедуры чтения-запись используются и больше ничего. Про UDMA можешь сразу забыть.Да и мозгов у него маловато, так что про запись 256 секторов тоже можешь забыть.
С таким же успехом можешь собрать свою приблуду на LPT порт- дешифратор и пара-тройка шинных формирователей- скорость будет та же, если не выше.

Есть готовые решения на одном контроллере USB-ATA, но они не подходят именно по причине реализации только стандартных команд, которые жестко прошиты в них.

Я хотел заюзать контроллер он Мотороллы, но у него USB1.0, посему бросил эту затею. А сейчас у Atmelа появился кульный контроллер-жду когда в союзе начнут продавать.
Sergant

Добавлено: Пт Окт 24, 2003 10:13 am  

Drauger писал(а): И, всетаки, по существу вопроса: можно или нет достать код операции? :(

:lol:
Ты разобрался в вызовами или нет?

Короче, всё очень просто. Для посекторного копирования:
Под NT/ХР пользуешь CreateFile для Физического устройства, дальше ReadFile, WriteFile.

Для 9x: Загружаешь VWIN32 и вызываешь через DeviceIoControl либо INT21, либо INT13.
Drauger
Откуда: г. Ярославль
Добавлено: Вс Окт 26, 2003 8:05 pm  

То есть если я дал команду и получил на винте DRQ, то я могу отослать данные через WriteFile?
Sergant

Добавлено: Пн Окт 27, 2003 10:15 am  

Ты немного не понял.

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

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

Хотя.... Если начать разбираться с командой IOCTL_дай_смарт, то можно увидеть пару-тройку, используемых ею структур. Очень интересные структуры, там и все регистры винта описаны и делается возврат регистра ошибок.
Берешь и пишешь в поле команды вместо дай_смарт, пиши_на диск......

Но опять же- это если диск виден как физический( т.е. с "повисшими" Фуджами ты работать не сможешь. Типа писать- читать служебку).

Если хочешь стучаться к винту тогда, когда его никто не видит, то придеться писать драйвер на порты.

А если его система видит, то и нефиг извращаться с регистрами- ползуй зашитые в систему процедуры. А для низко уровневой работы должна быть отдельная тулза.
Drauger
Откуда: г. Ярославль
Добавлено: Пн Окт 27, 2003 7:41 pm  

Насчет не определяющихся винтов - ты прав. Но если винт видится - через IOCTL запросы его делать будет быстрее.
Драйвер писать? Я посмотрел как это делается - куча геморроя и лишней возни, хотя можно взять шаблон и по нему попробовать, но логичней и проще достучаться до портов напрямую.
Попробую как смогу - дела задавили (вывихнул сустав).
Sergant

Добавлено: Ср Окт 29, 2003 2:35 pm  

:cry:
Постучался я через порты.

Нужно контроллер в винде отключать иначе эта цука не дает нормально работать.
viper
Откуда: Perm, Russia.
Добавлено: Чт Окт 30, 2003 9:30 pm  

Sergant писал(а): :cry:
Постучался я через порты.

Нужно контроллер в винде отключать иначе эта цука не дает нормально работать.
:lol:
Drauger
Откуда: г. Ярославль
Добавлено: Пт Мар 19, 2004 7:32 pm  

В итоге написал прогу на основе IOCTL_SCSI_PASS_THOUGH_DIRECT и доки по СКАЗИ командам. Работает. Все читает и пишет, но неопределяющийся винт, естесвенно, не видит.
Drauger
Откуда: г. Ярославль
Добавлено: Пт Мар 19, 2004 7:36 pm  

Насчет IOCTL_ATA_PASS_TROUGH_DIRECT, кстати - нашел обсуждение этого кода на немецком форуме программеров. Код есть только в Server 2003 DDK и поддерживаться начнет только с этой версии винды. Оказывается (почувствуй себя лохом!) Microsoft не входит в ассоциацию ATA!!!
 
       Список форумов HARDW.net -> Программирование компьютерного "железа"
Страница 1 из 1
Electronics Repair Forum :: Эрудиту
Powered by phpBB Search Engine Indexer (modded)
Powered by phpBB (modded) © phpBB Group

RadioTOP-рейтинг радиотехнических сайтов Рейтинг@Mail.ru rax.ru: показано число хитов за 24 часа, посетителей за 24 часа и за сегодня Rambler's Top100