Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > COM порт в режиме мониторинга


Автор: stallman 6.9.2011, 13:35
Здравствуйте.

Необходимо читать из файла ком-порта занятого иной программой в Win32.
Подобные вещи существуют - http://www.aggsoft.com/serial-port-monitor.htmнапример (функция spy(sniffer) mode).
Рыл в сторону CreateFile с параметрами share, но безрезультатно.

Автор: xvr 7.9.2011, 15:40
Цитата(stallman @  6.9.2011,  13:35 Найти цитируемый пост)
Рыл в сторону CreateFile с параметрами share, но безрезультатно.

Угу, COM драйвер всегда открывает себя в эксклюзивном режиме. Так что ответ на ваш вопрос -
Цитата(stallman @  6.9.2011,  13:35 Найти цитируемый пост)
Необходимо читать из файла ком-порта занятого иной программой в Win32.

никак  smile 
Цитата(stallman @  6.9.2011,  13:35 Найти цитируемый пост)
Подобные вещи существуют - AdvancedSerialPortMonitor например

Только свой драйвер в ядро ОС  smile 


Автор: Dem_max 7.9.2011, 17:46
неправда, есть программа portmon от майкрософт и вот как она работает http://technet.microsoft.com/ru-ru/sysinternals/bb896644
Цитата

Принцип работы программы:

ОС WinNT

Графический пользовательский интерфейс программы Portmon отвечает за определение последовательных и параллельных портов. Информация о последовательных портах берется из раздела реестра HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm, а о параллельных портах — из раздела HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Parallel Ports. В этих разделах содержится соответствие имен, доступных с помощью вызовов Win32, именам устройств последовательных и параллельных портов.

После выбора порта для отслеживания программа Portmon отправляет запрос драйверу устройства. Этот запрос содержит NT-имя требуемого устройства (например, \device\serial0). Драйвер использует стандартные фильтрующие программные интерфейсы и присоединяет свой собственный фильтрующий объект устройства к требуемому объекту устройства. Сначала с помощью вызова функции ZwCreateFile открывается требуемое устройство. Полученный дескриптор преобразуется в указатель на объект устройства. После создания собственного фильтрующего объекта устройства, который соответствует характеристикам требуемого устройства, драйвер устанавливает этот фильтр с помощью вызова функции IoAttachDeviceByPointer. Начиная с этого момента драйвер программы Portmon будет видеть все запросы, адресованные этому устройству.

В программу Portmon включена поддержка всех стандартных команд управления IOCTL последовательными и параллельными портами. В большинстве случае для настройки и чтения информации о состоянии из портов в приложениях и драйверах используются именно эти команды. Они определены в файлах \ddk\src\comm\inc\ntddser.h и \ddk\src\comm\inc\ntddpar.h из пакета DDK. Некоторые из них документированы в пакете DDK.

Автор: xvr 7.9.2011, 20:40
Вот это -
Цитата(Dem_max @  7.9.2011,  17:46 Найти цитируемый пост)
После создания собственного фильтрующего объекта устройства, который соответствует характеристикам требуемого устройства,
и есть тот самый драйвер, который 'в ядре ОС'. 'фильтрующий объект' - это инстанс специального драйвера, который portmon и помещает в ядро


Автор: Dem_max 8.9.2011, 04:00
portmon драйверов не устанавливает

Автор: xvr 8.9.2011, 12:15
Цитата(Dem_max @ 8.9.2011,  04:00)
portmon драйверов не устанавливает

Скачал и запустил portmon. Он создал рядом с собой файл PORTMSYS.SYS, загрузил его (в качестве драйвера) и стер.
В Winobj теперь фигурирует драйвер PORTMON и девайс Portmon
В реестре прописан драйвер PORTMON (в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PORTMON) с ключем
ImagePath = \??\C:\!1\PORTMSYS.SYS
(Запускал я Portmon из  C:\!1 как можно догадаться)

Так что то, что
Цитата

portmon драйверов не устанавливает
 несколько не соотвествует действительности  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)