Здравствуйте, Cloudo, Вы писали:
C>Есть реализованный драйвер протокола. При отправке сообщения с 3го кольца передается буфер с данными, на него накладывается IP и Ethernet заголовки, при этом в поле Protocol Field IP заголовка прописывается определенное число, не входящее в число известных (well-known), например 0xAA.
C>При принятии происходит всё наоборот, и принятый буфер передается клиенту протокола. Проблема заключается в том, что так как в Ethernet заголовке верхний протокол — IP, то, по всей видимости, стандартный драйвер стека TCP/IP винды также получает принятый пакет и пытается его обработать. В результате, встретив в поле Protocol Field неизвестное значение (0xAA), отправителю посылается ICMP с кодом 3 (Protocol Unreachable).
C>Получается, что на каждый принятый пакет, помимо ответа от моего протокола посылается ещё и icmp пакет, что, естественно, недопустимо.
C>(выделенное курсивом — мои догадки, если я не правильно думаю, поправьте, пожалуйста...)
C>За основу протокола был взят ddk'шный (версии 3790.1830) ndisprot. ОС — WinXP SP3 (Ndis 5.1).
C>Просьба подсказать, есть ли способ решения этой проблемы... например, каким-то образом сказать NDIS'у, что пакет обработан, дабы не заставлять ICMP ругаться (хотя по идее об этом говорит возврат SUCCESS кода из ProtReceive)... Пока что я вижу только способ — взять за основу passthru и в нем отслеживать, отдавать пакеты стеку TCP/IP или обрабатывать самому, но хотелось бы решение, не столь меняющее архитектуру драйвера...
На клиенте надо поставить фильтр.Попробуй использовать WFP.