3

Visual Studio 2012 で提供されている WDK ツールを使用して、イーサネット ドライバーを変更しようとしています。

WDK で提供されるサンプルは、特に「ミニポート アダプター」と「NDIS 軽量フィルター」です。私はまだドライバーを書き始めたばかりなので、コードをナビゲートするのは難しいと感じています。

Visual Studio 2012 でビルドした後、ミニポート アダプターをインストールできました [ネットワーク アダプター リストに「Microsoft Virtual Miniport Adapter」として表示されます]。IP アドレスとサブネット マスクも割り当てることができます。これが私のPC上の物理デバイスに接続されていないことを確認してください]。

また、アダプタからのドライバ メッセージをチェックするために、'Debug View' ソフトウェアをセットアップしました。[コードで 'DbgPrint' ステートメントを使用してビルドしました]。

1- メッセージが何度も出力されるのはなぜですか? メッセージは、プログラムの「datapath.c」ファイルからのもので、関数「MPSendNetBufferLists」からのものです。[「Net Buffer」は、ネットワーク上で送受信されるデータを指定します。]

2- Wireshark をセットアップしてアダプター上のデータをキャプチャすると、そこから ARP、HTTP、SSDP、MDNS などからの要求があることがわかります。アダプターと実際に通信しているものを理解できませんか? どうすれば話さないようにできますか?

「ping」を使用して、アダプターに割り当てた IP アドレスに接続があるかどうかを確認できます。アダプターは、すべてのパケットが送信され、パケット損失がなかったことを示す成功を返します。

私の目標は、IP アドレスを介してこのイーサネット アダプターに「データ」パケットを送受信することです。つまり、アダプタに割り当てられた IP アドレスにアプリケーションを接続して、それと通信する必要があります。

3- WDK で提供されているサンプルで実際に実行できますか?

その他の提案やアドバイスは大歓迎です。

PS- Visual Studio 2012 に組み込まれている Windows デバッガーを使用できませんでした。2 台の PC を使用し、「ターゲット」PC に接続してドライバーをインストールすることはできましたが、ブレークポイントなどで何もできませんでした。コードと「ターゲット」PC にドライバーをインストールした後、プログラムは何もしませんでした。これに関する提案はありますか?ドライバーの段階的なデバッグもできると思いました[私が間違っていることはわかっています]。

ありがとうアディティア

4

1 に答える 1

7

NDIS ミニポート ドライバーは、多くの低レベル ドライバーと同様に、ハードウェアと通信するためのものです。ミニポートの役割は、OS から送信パケットを取得し、ハードウェアが必要とする形式に変換し、ネットワーク上でパケットを送信するようにハードウェアに指示することです。

WDK には、実世界のハードウェアでパケットを送信する実世界のサンプル ドライバーを含めることができます (実際には、これを使用していました)。しかし、実際のドライバーは、サンプルの要点から逸れる多くのハードウェア固有の詳細に対処する必要があるため、これは多少の混乱を招きます。現実世界のドライバーから始める場合、最初にやらなければならないことは、すべてのハードウェア固有のビットを特定してそれらを切り取ることです。これにより、それらを独自のハードウェア固有のビットに置き換えることができます。

代わりに、WDK の "netvmini" サンプルは偽のドライバーです。つまり、実際のハードウェアを持っているふりをしているということですが、ひそかにそれはすべて嘘です。OS が netvmini にパケットを送信すると、netvmini ドライバーは、そのマシンにインストールされている他の netvmini ミニポート アダプターにそれらのパケットをブロードキャストするだけです。(事実上、同じマシンに 2 つの netvmini アダプターをインストールすると、同じイーサネット ハブに 2 つの実際のアダプターを接続した場合に何が起こるかをシミュレートできます。) したがって、ASCII アートでは、同じシステムに 2 つの netvmini アダプターをインストールすると、これが発生します。 :

       TCPIP                       TCPIP                      TCPIP
         |                           |                          |
Real physical miniport        Your netvmini #1           Your netvmini #2
         |                           \                          /
   [The Internet]                     [The netvmini virtual hub]

アスキー アートが示すように、netvmini アダプタにはインターネットへのパスがありません。したがって、ハードウェアの詳細を追加するまで、ドライバーはインターネットにルーティングできる「実際の」IP アドレスを取得しません。それまでは、Windows はどこにも行かない ARP と HTTP 要求を送信しようとし続けます。

特定の質問に答えるには:

  1. MPSendNetBufferLists からのメッセージは、OS がパケットの送信を試みるたびに出力されます。OS は実際のネットワーク接続があると見なすため、OS はその使用を何度か試みます。最終的には、これが有用なリンクではないという結論に達すると、少し落ち着くはずです.

  2. リクエストは TCPIP から来ています。TCPIP でデータを送信したくない場合は、アダプターからバインドを解除します。

  3. アダプターに確実にデータを送信できます。実際、すでにランダムな HTTP パケットなどを送信していることに気づきました。しかし、実際のハードウェアと通信する方法をドライバーに教えるまで、データは実際にはインターネットに到達しません。

「ハードウェアを持っていない!」と考えている場合は、何らかの仮想ミニポートを作成することをお勧めします。仮想ミニポートは、実際のハードウェアを持たないという点で netvmini に似ていますが、それでもマシンからパケットを取得する何らかの方法があります。たとえば、レイヤー 2 (L2TP など) で動作する VPN ミニポートは通常、「実際の」物理ミニポートとの間でデータを送受信する NDIS プロトコル ドライバーである 2 つ目のドライバーをインストールします。次に、仮想ミニポートは、マシンからパケットを取得する必要があるたびに、そのプロトコルと通信します。結果は次のとおりです。

        TCPIP
          |
  Your virtual miniport
          |
   Your NDIS protocol
          |
The real physical miniport
          |
     The Internet

代替アーキテクチャがあります。たとえば、レイヤー 4 (SSTP など) で動作する VPN は、NDIS プロトコル ドライバーを実装する代わりに、WSK ソケットを開くことを決定する場合があります。

        TCPIP
          |
  Your virtual miniport
          |
      WSK socket
          |
        TCPIP
          |
The real physical miniport
          |
     The Internet
于 2012-06-29T17:42:22.140 に答える