![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Vicul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 27.4.2009 Репутация: нет Всего: нет |
Добрый день коллеги,
работаю сейчас над проектом, где надо мониторить все устройства, подключенные к Ком портам. Бьюсь над этим уже вторую неделю, безрезультатно. Проблема в том, что Винда (XP/2003/2000) не допускает одновременно подключаться двум программам к порту. Прошу не предлагать готовые проги, типа Free Serial Port Monitor, мне они не подойдут, потому что необходимо потом обрабатывать полученные данные. В идеале устроят созданные библиотеки для мониторинга или идеи, в какую сторону копать. Пытался хукнуть процесс, который обрабатывает Комы, но он от svchost, и ОС не дала мне туда доступа. Заранее благодарю за любую наводку в этом вопросе. |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
Вышеупомянутые проги позволяют мониторить несколько устройств?
если да, тогда можно начинать копать как это делается и писать код, в простейшем случае - CreateFile/ReadFile + OVERLAPPED, или можно boost.asio поюзать. если не позволяют, тогда ХЗ. |
|||
|
||||
| Vicul |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 27.4.2009 Репутация: нет Всего: нет |
1
Нет, только то, которое выбрано для мониторинга.
В этом и проблема, если Ком открыт другой прогой, хендлера ты не получишь. |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
COM порт в Виндах - устройство с эксклюзивным доступом. Если оно открыто какой нибудь программой, то открыть его любой другой не получится НИКАК. Только через драйвер фильтр в Kernel mode. См. DDK (или WDK) - там вроде есть примеры
|
|||
|
||||
| Vicul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 27.4.2009 Репутация: нет Всего: нет |
Спасибо, я уже сам до этого дошел. |
|||
|
||||
| Vicul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 27.4.2009 Репутация: нет Всего: нет |
Короче по инету погулил и нашел этот драйвер (http://www.internals.com/). Вообщем поставил я его и без проблем добрался до портов Кома. Тут то и возникла другая проблема - это синхронизация моей программы с драйверами устройств подключенных к этим Комам. Т.е. пока я считываю байт инфы, десяток байтов успеваю пропустить, а также у микросхемы есть особенность, если я считываю поступивший байт, микросхема сбрасывает соответсвующий флаг на регистре соостояния, т.о. для программы, которую я мониторю, этот байт будет потерян. Отсюда вывод, перехват инфы нужно делать не на уровне порта (т.е. оставить обработку порта на уровне BIOS - int 14h), а делать мониторинг области памяти, куда int 14h сливает инфу. Ведь когда мы работаем на уровне CreateFile/ReadFile/WriteFile, мы считываем не байт, а всю инфу поступившую на порт, а значит должна быть область памяти, где находится эта инфа. Как найти эту область - идей у меня нет.
Это сообщение отредактировал(а) Vicul - 2.5.2009, 07:26 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Забудьте про BIOS, INT14 и области памяти, куда сливаются данные - в Windows это все не работает. Так же забудьте про м/сх порта - вам с ней напрямую общаться не надо. По поводу драйвера с http://www.internals.com/ (я так понимаю это WinIO) тоже забудьте.
Вам нужен PortMon, на этой странице есть он сам, и описание, как он работает - по нему можно сделать нужную функциональность в своей программе |
|||
|
||||
| Vicul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 27.4.2009 Репутация: нет Всего: нет |
пробовал я им мониторить мой модем, что-то не видит он этого этого модема. Может он только чистые Комы смотрит? Но все равно, попытаюсь еще раз проработать этот вариант. |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Он смотрит все, что является COM или LPT для Виндов. Вне зависимости от 'чистоты' COM'а |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |