![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Dias2004 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Помогите поуправлять внешними устройствами через 2 LPT порта одновременно!
Имеется драйвер lptwdmio.sys и модуль обращения к его функциям (http://valery-us4leh.narod.ru/XpCoding/Shablon_XP.html). Все блестяще работает, если LPT-порты имеют адреса из стандартного диапазона. Однако если порты установлены на мультикарте, они имеют "верхние" адреса, например на моем экземпляре железа после установки базовые адреса второго и третьего портов оказались равными $D000 и $B400 соответственно. Явным образом адреса портов в тексте программы управления (модуль lptio.pas из упомянутого источника) не прописаны - они вытягиваются системными функциями. Если кто знает или разбирается, подскажите, как научить модуль правильно распознавать нестандартные адреса, или хотя бы прописать их явным образом в виде констант? Это без проблем проходит в известном компоненте SmallPort, однако его быстродействие оказалось заметно - очень заметно хуже. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
надо смотреть исходники lptwdmio.sys,
обращение к нему имхо какое то кривое ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 1 Всего: 7 |
Не получится снаружи навязать свои адреса..
![]() Но всегда есть путь в обход.. ![]() Ход мысли понятен? Просто патчим 2*2*2 = 8 байт, и пользуемся! ![]()
Ой.. ![]() Ну.. Ить это не вскрытие же. Просто беспокоить автора по таким пустякам.. ![]() ![]() Это сообщение отредактировал(а) Mechanic - 18.5.2006, 02:40 --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Dias2004 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Если я не ошибаюсь, драйвер - это lptwdmio.sys.
В его теле я не обнаружил ни одного адреса. Где и как искать? Явно адреса встречаются (и действительно дваждый) в тексте модуля LPTIO.pas (см. фрагмент ниже), но это относится к коду, предназначенному для исполнения под Win9x. Под XP работает вызов вида
Судя по тексту, через структуру PairArray в драйвер передается некий условный адрес. Я не вижу, где и как условный адрес (который == <номер порта> or <> смещение регистра) преобразуется в абсолютный адрес опрашиваемого регистра. Могу только еще раз констатировать, что механизм преобразования работает только если базовый адрес порта - один из трех "стандартных" - $278, $378 или $3BC. Может, для работы с адресами в диапазоне $B000 и выше не хватает разрядности каких-нибудь переменных? Помогите разобраться. |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 1 Всего: 7 |
Плохо искал, видно..
![]() В аттаче прицепил исходный и пропатченный вариант. В пропатченном поменял 378 -> D000; 278 -> B400. Можно воспользоваться любым бинарным файловым компаратором, и посмотреть. Присоединённый файл ( Кол-во скачиваний: 65 ) ![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Dias2004 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Нет, про обратный порядок младший/старший даже я знаю... просто я искал строку вместо hex... ![]() Спасибо, еще не проверял, но оптимизма прибавилось! |
|||
|
||||
Dias2004 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Наконец приступил к испытаниям.
Адреса портов на тестовом железе оказались EF80 и EFA0. Записал эти адреса в LPTWDMIO.SYS на место 03BC и 0278. Запустил тестовую программу. Программа запускается, драйвер загружается, но управляется только порт 0378 (в демонстрационной программе это - порт LPT2). Кому близка тема - можете что-либо сказать или посоветовать? |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 1 Всего: 7 |
А запиши их вместо $378 - не промахнешься..
![]() Да, и в 2х местах каждый адрес прописывал? --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Dias2004 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Подробно описываю эксперимент.
Исходный код тех двух мест, где в драйвере lptwdmio.sys встречаются известные адреса, идентичен и выглядит (после дизасемблера) так:
Если в компьютере установить адрес LPT-порта равным 03BC, то вызов из программы вида
переключает бит D0 этого порта. Если параметром указана константа LPT2, то реагирует порт с адресом 0378, а на LPT3 откликается порт с адресом 0278, все как бы согласуется с асемблерным кодом. Теперь меняем в теле драйвера адреса 0378 и 0278 на адреса LPT-портов мультикарты (в моем случае они оказались EF80 и EFA0). Порт материнской платы компьютера (03BC) продолжает работать, как и раньше. Порты мультикарты не откликаются. ![]() Что можно было бы попробовать сделать? |
||||
|
|||||
Dias2004 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Может, кто знает, как связаться с автором драйвера lptwdmio.sys?
В теле указано: Автор: Гречко Ю.Б., http://progrex.narod.ru, 2003г. Статус: freeware. На сегодняшний день указанный URL мертв. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
У меня такой исходный код получился
Может те не дает эта строка call jmp_HAL.DLL!READ_PORT_UCHAR нормально общатся с твоим портом? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 1 Всего: 7 |
А дровишку после патчинга переустанавливал? Может быть срабатывает именно старая версия?
И ещё: а под ДОСом порт читается \ пишется? Это сообщение отредактировал(а) Mechanic - 31.5.2006, 23:08 Присоединённый файл ( Кол-во скачиваний: 42 ) ![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Dias2004 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 24.1.2006 Где: Москва Репутация: нет Всего: нет |
Я не знаю, как может мешать строка call jmp_HAL.DLL. Библиотека такая есть, может она не умеет обращаться к мультикарте, но маловероятно - ОС ведь видит все порты, их адреса, и даже работает с портами штатным образом, например управляет принтером. Как проверить, мешает ли вызов HAL.DLL, а если мешает, то что написать взамен?
Драйвер под XP загружается динамически, поэтому понятия "старая версия" просто не существует. Я не знаю, работает ли порт под DOS - это для меня вообще не важно. ![]() Важно то, что (как я упоминал в самом первом сообщении) все работает, если использовать компонент Small Port. С ним получается примерно так:
И все работает... но в несколько раз медленнее, чем через lptwdmio... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |