Здравствуйте, 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>>