Давайте рассмотрим доступные типы драйверов NDIS: минипорты, облегченные фильтры и протоколы.
Один минипорт NDIS не может решить эту проблему, так как минипорты получают пакеты от хостовой ОС. Вам нужно что-то, что получает пакеты из сети.
Легкий фильтр NDIS мог бы решить эту проблему, но решение было бы немного громоздким. Вам придется вручную синхронизировать два несвязанных стека мини-портов. Это сложнее, чем кажется; другие, кто пробовал это раньше, ошибались с первых нескольких попыток.
Драйвер протокола NDIS — лучший способ решить эту проблему. Драйвер протокола предназначен для подключения к нескольким мини-портам, а драйвер протокола может направлять пакеты из одного стека мини-портов в другой.
Но в драйверах протоколов отсутствует одна функция. Если вы просто пишете драйвер протокола, то драйверы выстраиваются следующим образом:
[TCPIP] [YourProtocol]
| \ / |
| \/ |
| /\ |
| / \ |
[NIC0] [NIC1]
То есть стек TCPIP хоста видит оба сетевых адаптера как отдельные сетевые адаптеры. (@Aczire, вы указали в предыдущем вопросе, что это нормально для вас , Но для пояснительных целей, вот остальная часть истории.)
NDIS позволяет решить подобные проблемы с помощью драйвера MUX-IM. Драйвер IM — это, по сути, просто протокол, приклеенный к другому мини-порту. Это позволяет вам точно контролировать, что видит ОС хоста:
[TCPIP]
|
|
|
|
[YourMiniport]
[YourProtocol]
| |
| |
| |
| |
[NIC0] [NIC1]
С помощью этой архитектуры вы можете обмануть ОС хоста, заставив ее думать, что эти две сети одинаковы. (Например, в пользовательском графическом интерфейсе отображается один сетевой адаптер, а не два.) Однако драйверы IM требуют значительной сложности: их сложно написать, и еще труднее сделать правильно. Я не рекомендую вам заниматься драйвером IM, если у вас нет значительного опыта и времени.
person
Jeffrey Tippet
schedule
04.04.2013