|
| Автор |
Сообщение |
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!!! |
|
| |