Здравствуйте Andrew S, Вы писали:
AS>А IRP проще наверное стеково передавать? Дело в том, что многие из IRP будут нести данные, нужные lower level драйверу. Поэтому я и решил, чтобу не разводить копии IRP — проще аттачить его на стек драйверов. В этом случае функции filter части вторичного девайса драйвера сводятся просто к передачи запроса Lower level драйверу. AS>Или я неправ?
Ну здесь дело в том что устройство, которое аттачится наверх стека, по-хорошему должно сохранять флаги нижних устройств, в частности и флаг эксклюзивности, а так как сериалпорт должен быть эксклюзивным, то при такой архитектуре (устройство для общения с приложением сидит наверху стека) — не удастся открыть более одного хэндла. Поэтому твое приложение и какаянить другая програмка не смогут работать одновременно. Или же наоборот, если ты снимешь флаг экслюзивности, то 2 приложения смогут открыть сериалпорт, что тоже неправильно. Отсюда и необходимость "вторичного" устройства. Пробовать передавать оригинальный ИРП из девайса-сателлита прямо в девайс сериал порта — очень не рекомендую, даже если данные запроса менять не надо. Лучше иметь пул preallocated ирпов для девайса сериал порта, и брать из него при необходимости (ну и пополнять его соответвенно тоже). Отвечая на следующий пост — на мой взгляд, можно вообще пренебречь "оверхедом" от создания дополнительных девайсов, и действовать так, как будет архитектурно правильно. Если тебе кажется, что логичнее чтоб у каждого порта был свое устройство-"сателлит" — значит так и делай.
Удачи!