NDIS仕様ドライバーの概要

ネットワークドライバー



ネットワークドライバーは、TDIドライバー(トランスポートドライバーインターフェイス)とNDISドライバー(ネットワークドライバーインターフェイス仕様)の2つのカテゴリに分類できます。 TDIドライバーは、SMBクライアント、SMBサーバー、SMBラッパー(NFFS、MSFS)などの高レベルドライバーです。 NDISドライバーを検討します。 NDISは特別なドライバー(ndis.sysファイルがそれに対応します)で、低レベルのネットワークドライバーで使用される機能が含まれています。 NDISは、それ自体、低レベルのネットワークドライバーを包み込み、相互およびハードウェアとの通信の仲介者です。 実際、NDISはWindowsの3番目のコアと考えることができます。 NDISとは何かをより明確に理解するために、次の図を見ることができます。



NDISの構造





この図からわかるように、NDISドライバーには3つのタイプがあります。



それぞれを個別に検討しましょう。



ミニポートドライバー



ハードウェアの各ネットワーク部分には、独自のミニポートドライバーがあります。 ミニポートドライバーは、NDISを介していくつかのコマンドを受け取ります。 ミニポートドライバーの機能は次のように説明できます。



ミニポートドライバーには、さまざまなイベントを通知する22個の標準コールバック関数が含まれています(これらの関数の一部はNULLになる可能性があるため、ドライバーは対応するイベントを通知されません)。 NDISは、ミニポートドライバーが使用する約150の関数をエクスポートします。



ミニポートドライバは、「コネクションレス」(たとえば、イーサネットアダプタドライバ)と「コネクション指向」(たとえば、モデムドライバ)です。 接続指向のドライバーでは、コールバックシステムはもう少し複雑です。通信チャネルへの接続、チャネルからの切断、チャネルの選択(ワイヤレスアダプター用)などに関連するイベントハンドラーが含まれます。 一部のConnection指向の操作では、ドライバーは名前の「Co」プレフィックスが異なる特別なNDIS関数を呼び出します(たとえば、NdisMIndicateReceivePacketの代わりに、Connection指向のドライバーはNdisMColndicateReceivePacketを呼び出す必要があります)。



各コールバックは、情報の発行、データの送信、データの受信など、独自のタスクを実行します。 詳細については、WDK(DDK)のヘルプを参照してください。 ここで、コールバックに関する完全な情報を取得できます。



プロトコルドライバーは、ミニポートドライバーに委ねることができます(ミニポートドライバーが単独でこれを実行できるか、アダプターがハードウェアレベルで実行できる場合)。その機能の一部(たとえば、IPパケットのチェックサムまたはデジタル署名を区別したり、大きなTCPパケットをフラグメント化します)。 これにより、ネットワークメーカーが大幅に強化されます。



たとえば、ミニポートドライバーがサポートできるさまざまな追加の高度なインターフェイスがあります。

  1. LBFO(ロードバランシングとフェイルオーバー)-それを理解しているアダプターが、発信トラフィックを相互に分散し、互いのエラーを修正できるようにします。 ただし、これはWindowsがほとんどインストールされないバックボーンルーター(大規模ネットワークの中央ルーター)でのみ意味があります。
  2. FFP(高速転送パス)-それを理解するアダプターが、OSの関与やメインのコンピュータープロセッサーのロードなしで、純粋にハードウェアでパケットをルーティング/フィルター処理できるようにします。


中間ドライバー



上記の中間ドライバーは、ミニポートドライバーとして表示されます(写真を参照)。 仮想アダプタのように、そして以下-仮想プロトコルのようなプロトコルドライバーのように(もう一度、画像を見てください)。 特別な場合として、中間ドライバーが上からしか見えない場合があります。



通常、中間ドライバーは次のいずれかを実行します。



スニファーがネットワークトラフィックのスキャンに使用するのは断続的なドライバーです。 ある中間ドライバーの仮想プロトコルが別の中間ドライバーの仮想アダプターにバインドされている場合、中間ドライバーは互いに位置合わせできます。 しかし、パフォーマンスが低下するため、これはめったに行われません。



プロトコルドライバー


プロトコルドライバーは、NDIS仕様の最高レベルです。 これらのドライバーは、各パッケージにリソースを割り当て、アプリケーションデータをパッケージにコピーし、それらを低レベルのドライバーに渡すことを約束します。 プロトコルドライバーは、基盤となるドライバーからパケットを受信するためのインターフェイスも提供します。



プロトコルドライバーには、たとえばTCP / IP(tspip.sys)などのネットワークプロトコルスタックを実装するトランスポートドライバーも含まれます。



投稿が読者にとって興味深い場合は、以下の投稿で、独自のスニファーのような中間ドライバーの例を記述するか、ドライバーの各タイプ(ミニポート、中間、またはプロトコル)の記述方法について説明することができます。



ご清聴ありがとうございました。



All Articles