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)