Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, Exkurs, Вы писали:
E>>Но все таких хотелось бы посмотреть ещё примеры или услышать способы "общения драйверов" напрямую, минуя manager, при условии, что нет исходников фильтруемого драйвера. ГМ>-- ГМ>В одном из наших проектов стояла задача снимать с платы А, которая управлялась приложением А через свой драйвер А, кое-какую информацию (управление платой осуществялось через личные IOCTL коды, значения которых были доступны). Эта информация снималась PCI-картой В, которая физически подключалась к плате А и имела свое приложение В и свой драйвер В. Для того, чтобы не трогать приложение А вообще, было решено написать device-фильтр BF, который находился над драйвером А и следил за IOCTL кодами, приходящими к нему, и в нужный момент времени запускал процессы в плате В через ее драйвер В.
ГМ>Приложение В сканировало все драйвера в системе и находила все драйвера А. Пользователь выбирал тот драйвер (и, соответственно, ту плату), за которым нужно было следить. Имя этого драйвера передавалось в драйвер В, который создавал device-фильтр BF и подсоединял его как верхний фильтр к драйверу А. При создании device'а BF ему передавался указатель на драйвер В (все было написано на С++ и передавался указатель на абстрактный объект, реализующий интерфейс к драйверу В, в конструкторе объекта BF), который в BF запоминался. Затем, при "проходе" нужных IOCTL через device BF, последний вызывал виртуальный метод по указателю на интерфес к В, в реализации которого и осуществлялось управление платой В.
ГМ>Такая схема работы успешно работала как под windows NT4, так и под XP.
ГМ>C уважением, ГМ>Геннадий Майко.
Драйвер BF был реализован посредством IoAttachXXX или иным способом ?
Осмысление бессмысленности имеет определенныей смысл !