Образец прототипа NDIS и мост Ethernet

Я пытался написать тестовый мост между двумя адаптерами Ethernet, используя пример прототипа NDIS, приведенный в WDK для Win 7. Пока что только что были созданы драйвер и прототип. Теперь мне было интересно, как действовать? Есть ли способ привязать только к паре адаптеров одновременно?


person Jimson Kannanthara James    schedule 31.03.2013    source источник
comment
@ Джеффри-Типпет Есть идеи?   -  person Jimson Kannanthara James    schedule 01.04.2013


Ответы (1)


Протокол NDIS автоматически связывается со всеми поддерживаемыми адаптерами. Таким образом, вам не нужно делать дополнительную работу, чтобы заставить NDISPROT связываться с двумя сетевыми адаптерами Ethernet.

После создания драйвера все, что вам нужно сделать, это:

  1. Установите драйвер (используйте INetCfgClassSetup::Install, как показано в образце bindview; или для случайных экспериментов в графическом интерфейсе свойств сетевой карты есть кнопка Добавить..., позволяющая устанавливать протоколы с помощью графического интерфейса).
  2. Запустите службу драйвера (используйте StartService API; для случайных экспериментов подойдет net start ndisprot).

Вот и все. NDIS вызовет обработчик ProtocolBindAdpaterEx вашего протокола для каждой сетевой карты Ethernet в системе. В примере этот обратный вызов называется NdisprotBindAdapter.

Используйте !ndiskd.protocol, чтобы убедиться, что ваш протокол теперь привязан к нескольким мини-портам.

person Jeffrey Tippet    schedule 02.04.2013
comment
Спасибо, Джеффри, могу ли я выполнить привязку только к выбранным адаптерам? - person Jimson Kannanthara James; 03.04.2013
comment
Кроме того, это правильный способ сделать Ethernet-мост или мне следует использовать мини-порт или драйвер фильтра? Знаете ли вы какой-либо пример драйвера моста Ethernet в NDIS6.x? - person Jimson Kannanthara James; 03.04.2013
comment
Для привязки к выбранным адаптерам: в пользовательском режиме используйте INetCfgBindingPath::Enable(FALSE), чтобы отключить привязки к определенным адаптерам. В режиме ядра: в обработчике ProtocolBindAdapterEx просто выберите не вызывать NdisOpenAdapterEx, если вы не хотите выполнять привязку. - person Jeffrey Tippet; 04.04.2013
comment
Windows поставляется с мостом Ethernet, так что это лучший пример для сравнения. Он реализован как драйвер MUX-IM, что довольно сложно сделать правильно. Преимущество MUX-IM по сравнению с обычным протоколом заключается в том, что мостовые адаптеры выглядят как 1 унифицированный сетевой интерфейс для ОС. Если это нормально, что мостовые адаптеры появляются независимо от ОС, то вам не нужен MUX-IM, и достаточно протокола. - person Jeffrey Tippet; 04.04.2013
comment
нет проблем с появлением мостовых адаптеров, появляющихся независимо от ОС, но что меня сейчас смущает, так это то, что после прочтения этой ссылки tech-archive.net/Archive/Development/ Можно ли добиться того же, изменив сквозной доступ? Если да, интересно как? - person Jimson Kannanthara James; 04.04.2013
comment
Не используйте для этого passthru. Поскольку для этого ответа требуется больше места, я ответил здесь: stackoverflow.com/questions/15792238/ - person Jeffrey Tippet; 05.04.2013