Контролируем LPT & COM ports
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 09.05.07 20:04
Оценка:
Здравствуйте, good3p, Вы писали:

G>моя задача в создании приложения, чтобы по команде пользователя закрывать для всех приложений доступ к LPT и COM порту. и только с помощью этого приложения можно вернуть порты в нормальное доступное состояние.

IRP_MJ_CREATE (и другие обработчики по желанию) можно выполнить таким образом, чтобы в зависимости от флага или некоего условия, контролируемого приложением или еще кем, возврашалось в ответ либо ошибка вроде "доступ запрещен", либо результат работы оригинального обработчика serial драйвера. Я говорю о фильтре класса Ports:

Ports (COM & LPT ports)
Class = Ports
ClassGuid = {4d36e978-e325-11ce-bfc1-08002be10318}
This class includes serial and parallel port devices.


Итого Вам нужно сделать:
— встать фильтром указанного выше класса устройств (.inf file, toaster sample, поиск по форуму)
AddDevice — решаете тут какие из появляющихся в системе портов требуют контроля
IRP_MJ_CREATE\IRP_MJ_CLOSE — для обеспечивания требуемой ф-ти
IRP_MJ_PNP и IRP_MJ_POWER — туда идут заглушки <copy-paste из примеров в DDK>
IRP_MJ_INTERNAL_DEVICE_CONTROL — общение драйвера с управляющим приложением которое командует, какие порты кому запрешать\разрешать

примеры фильтров класса можно найти в toaster\filter

пример похожего фильтра — \src\kmdf\kbfiltr (переписанный в WDF модели src\input\kbfiltr), только для клавиатуры (есть и для мыши), а не как у Вас в задаче.

Кстати в WDK по новой WDF модели сделаны новыe примеры, касающиеся темы:
\src\input\vserial (Virtual Serial Driver) — для полной симуляции serial порта
\src\kmdf\serial — переписан старый добрый src\kernel\serial который упоминался в 2003 году.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.