0

アルテラのイーサネットコアのおかげで、3つのNICを含む単一のPCIデバイスを用意します。WinXPe、つまりNDIS5.1に実装する必要があります。MVPは、コアごとにWDMドライバーを実装し、次に個々のWDMドライバーと通信する単一のNDISドライバーを実装することを提案しましたが、単一のNDISドライバーには複数のポートまたはチャネルの概念がないように見えるため、私にはわかりません。

DriverEntryで、イーサネットコアごとに1回NdisMInitializeWrapperと呼ばれるNDISドライバーがある場合はどうなりますか?同じDriverObjectを使用して毎回呼び出す必要がありますが、おそらく、呼び出しごとに異なるNdisWrapperHandleが返されます。この一意のNdisWrapperHandleは、他のすべてのNDISドライバー関数を呼び出すためのコンテキスト指定子として使用できます。

4

1 に答える 1

1

それはうまくいきません。NdisMInitializeWrapperは、ドライバーごとに1回だけ呼び出すことができます。

ルールは次のとおりです。ネットワークインターフェイスごとに1つのデバイスノードが必要です。したがって、3つのイーサネットインターフェイスが必要な場合は、システムに3つのデバイスノードが必要です。そこにたどり着くにはいくつかの方法があります。

  1. PCIバスは、PCI機能番号ごとにデバイスノードを作成します。PCIデバイスが3つの機能をバスに公開している場合、Windowsは3つのミニポートデバイスオブジェクトを列挙します。これにより、ドライバーは非常にシンプルになります。ただし、明らかに、これを行うにはハードウェアを再調整できる必要があります。

  2. または、1つのPCI機能を備えた1つのPCIデバイスだけでスタックしている場合は、PCIで列挙されたデバイスノードを自分で多重化する必要があります。これは、独自の仮想バスドライバー(VBD)を作成する必要があることを意味します。PCIバスは、VBDのドライバーに関連付けられている1つのデバイスノードを列挙します。次に、VBDが向きを変えて、それぞれがミニポートに関連付けられている3つの子ノードを列挙します。

    このアプローチでは、 2つのドライバーを作成する必要があるため、かなり多くの作業が必要になります。幸いなことに、WDFを使用すると、単なる定命の者のためにバスの運転手を書くことができます。VBDは、子ネットワークミニポート間でリソース(割り込み、構成スペース)を共有するためのコードを実装する必要があります。

有名ベンダーは、オプション#1とオプション#2のどちらを選択したかで分かれているため、どちら機能します。あなたの説明から、あなたはすでにVBDを実装するためのアドバイスを与えられているように思えます。

于 2012-04-05T05:38:16.497 に答える