Re: virtual COM port
- From
- Andrey Kochin (2:5026/23.45)
- To
- Michael Mamaev
- Date
- 2002-07-02T21:47:13Z
- Area
- SU.WINDOWS.NT.PROG
Пpивет, Michael !
Воскpесенье Июнь 30 2002, Michael Mamaev пишет к All:
MM> Насколько сложно pеализовать виpтyальный последовательный поpт (т.е.,
MM> чтобы он появился в control panel/ports, был достyпен чеpез API, но все
MM> данные, пpочитанные/запихнyтые от/тyда, обpабатывались моей пpогpаммой).
Если есть опыт написания драйверов, то - несложно. У меня подобный драйвер
занял немногим более 1000 строк на С. Создает 2 устройства - один СОМ-порт,
другой - неизвестное устройство - задняя дверь, через которую трафик СОМ-порта
уходит к моему приложению. В control panel, правда, не появляется (да, мне и не
нужно было), но через API доступен.
MM> Кyда копать?
Мне проще было - я копировал блоками из своих старых поделок. :)
А так, если не найдешь подходящих исходников - можно взять какой-нибудь
простейший пример из ДДК (из PORTIO, например). Научиться создавать дивайсы,
обрабатывать запросы к ним и т.п. Затем, посмотреть help-ы и исходники SERIAL не
предмет, какие запросы и как обрабатывет стандартный драйвер; добавить
собственную реализацию. Полезным оказывается небезызвестный portmon.
Надо признать, однако, что такое развлекалово в первый раз требует обильного
досуга. Мимо граблей не пройдешь. ;)
Основная трудность для меня в данном случае состояла в том, что драйвер
работает одновременно с двумя процессами. Пришлось учитывать, что задача может
переключиться внутри вызова IoCompleteRequest, т.к. запрос от одного процесса
завершался при выполнении запроса (в контексте) другого процесса (внутреннюю
буферизацию ломало делать :).
PS. Речь шла о kernel-mode driver и, соответственно, об NT-образных.
Пока!
Andrey
---
* Origin: Бытие обременяет сознание. (FidoNet 2:5026/23.45)