(57)【特許請求の範囲】
【請求項１】
通信パスを介して送信されるデータパケットに対してフィルタリングオペレーションを実行することができる、１つまたは複数のフィルタインスタンスを含むフィルタスタックを制御するための抽象インタフェースに関連する１つまたは複数のプロトコルスタックを含む前記通信パスによって、通信可能にネットワークに接続されるコンピューティング装置において、関連するプロトコルスタックのオペレーションを中断することなく、前記フィルタインスタンスのうちの１つのフィルタインスタンスを前記フィルタスタックに挿入して、プロセッサおよびネットワーク資源を保存する方法であって、
前記フィルタスタックのオペレーションをポーズする動作と、
少なくとも１つの関連するプロトコルスタックがデータ転送可能な間に、前記フィルタインスタンスを前記フィルタスタックに挿入する動作と、
フィルタスタックのオペレーションをスタートする動作と
を備えたことを特徴とする方法。
【請求項２】
前記フィルタスタックのオペレーションをポーズする動作は、前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをポーズする動作を備えたことを特徴とする請求項１に記載の方法。
【請求項３】
前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをポーズする動作は、１つまたは複数のポーズルーチンが、前記１つまたは複数のフィルタインスタンスがポーズされるべきであることを示すデータを受信する動作を備えたことを特徴とする請求項２に記載の方法。
【請求項４】
前記フィルタスタックのオペレーションをポーズする動作は、転送されたデータパケットを、前記データパケットに含まれるデータを変更することなく前記通信パスにデータパケットを返送するダミールーチンへ、再送する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項５】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、前記抽象インタフェースから受信したパラメータを用いることによって構成されたフィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項６】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタドライバが、データを抽象インタフェースに転送することを容易にするために用いることができるルーチンハンドラを受信する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項７】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタドライバが、前記フィルタインスタンスのための資源をアロケートする動作を備えたことを特徴とする請求項１に記載の方法。
【請求項８】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタドライバが、前記フィルタインスタンスのためのフィルタインスタンスコンテキストを生成する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項９】
前記フィルタドライバが前記フィルタインスタンスのためのフィルタインスタンスコンテキストを生成する動作は、前記フィルタドライバが、前記フィルタインスタンスコンテキストを前記抽象インタフェースに送信する動作を備えたことを特徴とする請求項８に記載の方法。
【請求項１０】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタドライバが、前記抽象インタフェースにデータを登録する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１１】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタドライバが、システムレジストリにデータを登録する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１２】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、システムレジストリから受信したパラメータを用いることによって構成された前記フィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１３】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、前記フィルタスタックにおける、予め定められた位置に前記フィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１４】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、仮想接続上で転送されるデータパケットをフィルタにかけることができるフィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１５】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、前記コンピューティング装置の電源制御に関連するデータを受信するためのエントリポイントを含むフィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１６】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、プラグアンドプレイデバイスに関連するデータを受信するためのエントリポイントを含むフィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１７】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、管理インタフェースを通して変更することができる属性を含むフィルタインスタンスを挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１８】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタインスタンスを複数のトランスポートレイヤプロトコルにバインドされたフィルタスタック上に挿入する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項１９】
前記フィルタインスタンスを前記フィルタスタックに挿入する動作は、フィルタドライバが、前記フィルタスタックに前記フィルタインスタンスが挿入されたことを検証する動作を備えたことを特徴とする請求項１に記載の方法。
【請求項２０】
前記フィルタドライバが、前記フィルタスタックに前記フィルタインスタンスが挿入されたことを検証する動作は、前記フィルタドライバが、挿入ステータスを前記抽象インタフェースに送信する動作を備えたことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記フィルタスタックのオペレーションをスタートする動作は、前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをスタートする動作を備えたことを特徴とする請求項１に記載の方法。
【請求項２２】
前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをスタートする動作は、１つまたは複数のスタートルーチンが、前記１つまたは複数のフィルタインスタンスがスタートされるべきであることを示すデータを受信する動作を備えたことを特徴とする請求項２１に記載の方法。
【請求項２３】
関連するプロトコルスタックに、前記フィルタスタックのオペレーションがポーズされようとしていることを通知する動作をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２４】
関連するプロトコルスタックに、前記フィルタスタックが挿入された前記フィルタインスタンスを現在含んでいることを通知する動作をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２５】
関連するプロトコルスタックに、前記フィルタスタックのオペレーションがスタートされようとしていることを通知する動作をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２６】
１つまたは複数のフィルタインスタンスを含むフィルタスタックを制御するための抽象インタフェースに関連する１つまたは複数のプロトコルスタックを含む通信パスによって、通信可能にネットワークに接続されるコンピューティング装置において、関連するプロトコルスタックのオペレーションを中断することなく、前記１つまたは複数のフィルタインスタンスのうちの１つのフィルタインスタンスを前記フィルタスタックに除去して、プロセッサおよびネットワーク資源を保存する方法であって、
フィルタスタックのオペレーションをポーズする動作と、
少なくとも１つの関連するプロトコルスタックがデータ転送可能な間に、前記フィルタインスタンスを前記フィルタスタックから除去する動作と、
フィルタスタックのオペレーションをスタートする動作と
を備えたことを特徴とする方法。
【請求項２７】
前記フィルタスタックのオペレーションをポーズする動作は、前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをポーズする動作を備えたことを特徴とする請求項２６に記載の方法。
【請求項２８】
前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをポーズする動作は、１つまたは複数のポーズルーチンが、前記１つまたは複数のフィルタインスタンスがポーズされるべきであることを示すデータを受信する動作を備えたことを特徴とする請求項２７に記載の方法。
【請求項２９】
前記フィルタスタックのオペレーションをポーズする動作は、転送されたデータパケットを、前記データパケットを前記通信パスに返送するダミールーチンへ再送する動作を備えたことを特徴とする請求項２６に記載の方法。
【請求項３０】
前記フィルタインスタンスを前記フィルタスタックから除去する動作は、前記フィルタインスタンスをポーズする動作を備えたことを特徴とする請求項２６に記載の方法。
【請求項３１】
前記フィルタインスタンスを前記フィルタスタックから除去する動作は、フィルタドライバが、前記フィルタインスタンスで用いられた資源を解放する動作を備えたことを特徴とする請求項２６に記載の方法。
【請求項３２】
前記フィルタスタックのオペレーションをスタートする動作は、前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをスタートする動作を備えたことを特徴とする請求項２６に記載の方法。
【請求項３３】
前記フィルタスタックに含まれる１つまたは複数のフィルタインスタンスをスタートする動作は、１つまたは複数のスタートルーチンが、前記１つまたは複数のフィルタインスタンスがスタートされるべきであることを示すデータを受信する動作を備えたことを特徴とする請求項３２に記載の方法。
【請求項３４】
関連するフィルタスタックのオペレーションがポーズされようとしていることを前記プロトコルスタックに通知する動作をさらに備えたことを特徴とする請求項２６に記載の方法。
【請求項３５】
関連するフィルタスタックが挿入された前記フィルタインスタンスを現在含んでいることを前記プロトコルスタックに通知する動作をさらに備えたことを特徴とする請求項２６に記載の方法。
【請求項３６】
関連するフィルタスタックのオペレーションがスタートされようとしていることを前記プロトコルスタックに通知する動作をさらに備えたことを特徴とする請求項２６に記載の方法。
【請求項３７】
通信パスを介して送信されるデータパケットのいくつかの部分に対してフィルタリングオペレーションを実行することができる、フィルタスタックを制御するための抽象インタフェースに関連する１つまたは複数のプロトコルスタックを含む前記通信パスによって、通信可能にネットワークに接続されるコンピューティング装置において、関連するプロトコルスタックの前記オペレーションを中断することなくフィルタインスタンスを前記フィルタスタックに挿入して、プロセッサおよびネットワーク資源を保存する方法であって、
前記フィルタスタックのオペレーションをポーズする動作と、
再構成する間、通信パスに沿って効率的なデータの転送を促進するように前記フィルタスタックに含まれるフィルタリングオペレーションを再構成するステップと
を備えたことを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データパケットのフィルタリングに関し、より具体的には、抽象インタフェースが、フィルタスタックへのフィルタインスタンスの挿入、フィルタスタックからのフィルタインスタンスの除去および関連するプロトコルスタックを中断させずにフィルタインスタンスのファンクショナリティをバイパスするように制御するためのシステム、方法およびコンピュータプログラムプロダクトに関する。
【０００２】
【従来の技術】
今日の世界では、多数のコンピュータが、データ交換が可能なインターネットのようなコンピュータネットワークを介して互いに接続されている。しかし、これらのコンピュータの大多数は、１対１の関係で直接結合しているわけではない。むしろ、これらのコンピュータは、通常、ある種のネットワーク環境の中に存在しており、そこでは複数のコンピュータが相互接続され、各コンピュータは、そのネットワークに含まれる他のコンピュータ全てとデータを交換することができる。在来のネットワークに接続されるコンピュータの数が増加するのに伴い、このようなネットワークを介して送信されるデータの総量もまた、増加してきた。この結果、コンピュータネットワークを介した効率的で信頼性の高いデータ送信のための手法が開発されてきた。
【０００３】
ネットワークを介した効率的なデータ送信を促進する一つの手法は、「パケット化」である。パケット化とは、より大きなデータをより小さなセグメント、すなわち「パケット」に切断する手法である。パケットを用いれば、巨大なデータを処理するよりも必要とされる資源は少ない。加えて、パケットを用いることにより、データを増分の形で受信することができ、伝送エラーが発生した際、再送が必要なデータ量が減少する。
【０００４】
もう一つの手法は、通信プロトコルを実現するためのネットワーク化の枠組みを定める、開放型システム間相互接続（「ＯＳＩ」）モデルを用いることである。ＯＳＩモデルは、送信データに対するオペレーションを別個の７つのレイヤに分解し、各レイヤは、データ送信処理中の一定のオペレーションを実行する。各レイヤを実装するネットワークアプリケーションもあるが、多くのアプリケーションはネットワークを介したデータ送信で用いるために選んだレイヤのみを実装する。トランスポートレイヤとデータリンクレイヤの２つのレイヤが、ほとんどのプロトコルスタックによって組み込まれる。トランスポートレイヤは、通常、データをパケット化することに関係している。トランスポートレイヤの一例として、ＴＣＰ（伝送制御プロトコル）がある。データリンクレイヤは、通常、ビットデータをパケットに符号化し、パケットをビットデータに復号化することに関係している。
【０００５】
コンピューティング装置からネットワークへのデータ送信の際は、通常、トランスポートレイヤドライバによる大容量データのパケット化、データリンクレイヤドライバによるパケットのビットデータへの復号化、およびネットワークインタフェースカードのようなネットワークハードウェアによるビットデータのネットワークへの伝送が行われる。コンピューティング装置がネットワークからデータを受信する際は、通常、これらのオペレーションが逆の順序で行われる。すなわち、ハードウェア装置がビットデータを受信し、データリンクレイヤドライバがビットデータをパケットに符号化し、およびパケットはトランスポートレイヤドライバに送られ大容量データに結合される。データリンクレイヤドライバは、パケットをビットデータに復号化してネットワークハードウェアにディスパッチするとき、およびビットデータをパケットに符号化してトランスポートレイヤプロトコルにディスパッチするとき、データに関し特定のオペレーションを実行することができる。これは、データがネットワークを経由してあるいはより高位のプロトコルへ送られる前に、データの変更が必要となる可能性を考慮すると、優位な点である。
【０００６】
歴史的に見ると、データリンクレイヤドライバは、特定のプラットフォームにおいて互換性のあるデータ送信を容易にするため、書き込まれまたは設計された。多くのプロトコルとハードウェア装置のタイプが増殖したため、問題が発生した。データリンクレイヤドライバによって実行されるオペレーションを削除し、追加し、または変更するためには、ドライバを完全に再書き込みしければならない。データリンクレイヤドライバの再書き込みは、極めてコストがかり、高いレベルの専門技術を必要とし、および、しばしば既存のハードウェアを廃れさせ、あるいはユーザに強化された機能の使用を控えさせる。さらに、コンピュータシステム内に複数のデータリンクレイヤドライバが存在すると、種々のデータリンクレイヤドライバに含まれる機能が冗長となるものの、適当なオペレーションのためにこれらの機能を必要となる可能性がある。
【０００７】
結果として、プロトコルスタックのデータリンクレイヤにおいて、データに関するオペレーションを実行する他の方法が開発された。このような方法の一つに「ＩＰファイヤウォールフック」があるが、これは、プロトコルスタックのデータリンクレイヤとトランスポートレイヤの間を通過するデータパケットをフックする。パケットをフックする利点は、パケットが処理されるべきか廃棄されるべきかを決定するためにそのパケットの送り主アドレスを検証するといった、データのモニタ機能を容易に実行することができるという点である。しかし、パケットをフックすることは、パケットは変更されたりデータフローに挿入されたりする可能性がないので、そ例外の利点は限定されている。さらに、パケットのフックに関し互換性のない、その他のより新しいネットワーク技術が開発されてきた。例えば、ＩＰファイヤウォールフックは、広く用いられるインターネット接続共有技術とは相互運用性がない。
【０００８】
プロトコルスタックのデータリンクレイヤを通して渡されるデータパケットに関するオペレーションを実行するためのもう一つの方法は、「中間ドライバ」を使用することである。中間ドライバは、トランスポートレイヤとデータリンクレイヤとの間に位置し、従来のデータモニタのみならずデータ圧縮および暗号のような、他のより進んだフィルタリング機能も実行することができる。中間ドライバにより、下位にあるリンクレイヤデバイスドライバの再書き込みを必要とすることなく、プロトコルスタックに機能を追加し、またはプロトコルスタックから機能を削除することができる。さらに、複数の中間ドライバを階層化して、データリンクレイヤを通して渡されるデータに対して一連の関数を実行することができる。
【０００９】
【発明が解決しようとする課題】
中間ドライバは、ＩＰファイヤウォールフックに比較してより多くの機能を提供するが、ある固有の問題を抱える。中間ドライバのインストールおよび構成には、しばしばレジストリのようなオペレーティングシステムのコンポーネントからデータを取得して組み込むか、あるいはかかるコンポーネントへデータを提供する必要がある。中間ドライバがオペレーティングシステムデータを処理するフィルタリング環境は、少なくとも２つの理由から有害となる。
【００１０】
中間ドライバがインストールされ、またはプロトコルスタックから除去されるためには、プロトコルスタックを取り壊し、再構築しなければならないであろう。この結果、中間ドライバの機能を追加するために、プロトコルスタックを再構築しなければならないかもしれない。同様に、再構築がなされないと、中間ドライバが書き込んだデータによって、プロトコルスタックが不正動作を起こす可能性がある。プロトコルスタックを取り壊し、再構築する際、コンピュータシステムのリブートを行って、データを中間ドライバのために適切に初期化することが必要かもしれない。加えて、ある環境のもとでは、インストールされた中間ドライバは、起動された後にネットワークデータをみるだけでいいかもしれない。しかし、起動されないときであっても、中間ドライバはインストールされ続け、貴重なオペレーティングシステムの資源を使用し、その結果ネットワークの性能を低下させるであろう。
【００１１】
したがって、効率的にデータパケットをフィルタリングしたり、フィルタリングオペレーションを変更して処理およびネットワーク資源を、温存するためのシステム、方法およびコンピュータプログラムプロダクトが要望される。
【００１２】
【課題を解決するための手段】
本発明は、効率的なデータパケットのフィルタリングおよびフィルタリングオペレーションの変更を提供することにある。コンピューティング装置に含まれるプロトコルスタックは、１つまたは複数のフィルタインスタンスを含むフィルタスタックにも関連している。プロトコルスタックに関連するデータパケットは、そのデータパケットに対してフィルタリングオペレーションを実行するフィルタインスタンスを通して渡される。フィルタインスタンスは、関連するプロトコルスタックが分裂する可能性を減らすように、フィルタスタックに挿入し、またはフィルタスタックから除去することができる。
【００１３】
さらに、フィルタインスタンスに関連するフィルタリングオペレーションは、データパケットおよび／またはコンフィグレーションパラメータに基づき、バイパスすることができる。フィルタリングオペレーションのバイパスは、種々の方法で実行することができる。パケットが、通信パス、例えばデータパスまたは制御パスに関連したフィルタインスタンスを完全にバイパスするとき、フィルタリングオペレーションのバイパスを実行することができる。フィルタインスタンスに対する内部の１つまたは複数のフィルタリングオペレーションが、受信したデータパケットに対して実行されないときもまた、フィルタリングオペレーションのバイパスを実行することができる。抽象インタフェースは、フィルタスタックに対応するフィルタインスタンスの動的な挿入と除去を容易に行うフィルタドライバをコールすることによってフィルタスタックを制御する。
【００１４】
フィルタインスタンスがフィルタスタックに挿入されるとき、フィルタドライバは、抽象インタフェースからパラメータを受信することができる。これらのパラメータによって、フィルタインスタンスを構成してフィルタリングオペレーションを実行することが容易となる。フィルタインスタンスは、入力データパケットの特性に基づき、異なるフィルタリングオペレーションを実行するよう構成することできる。例えば、一つのフィルタスタックにより、ＩＰ（インターネットプロトコル）およびＩＰＸ（インターネットワークパケット交換）の双方のパケットをフィルタすることができる。パラメータが適切であれば、データがＩＰパケットに含まれているかＩＰＸパケットに含まれているかにかかわらず、フィルタインスタンスは同じ処理を実行することができる。さらにまた、パラメータが適切であれば、データがＩＰパケットかまたはＩＰＸパケットに含まれるかに依存して、類似するがある程度異なる処理をフィルタインスタンスにより実行することもできる。
【００１５】
トランスポートごとに一つのインスタンスとするのに対比して、全てのトランスポートのために一つのフィルタスタックを用いてデータパケットをフィルタリングすることによって、コンピューティング装置により構成され、維持されるフィルタインスタンスの個数を減らすことができる。これにより、フィルタスタックが冗長なロジックによって構成される機会を減少させることとなり、したがって、データパケットをフィルタリングすることに関連するオペレーション複雑さも軽減される。
【００１６】
抽象インタフェースによって、新たなフィルタインスタンスをオペレーション中のフィルタスタックへ挿入が容易になると、まず、現在のフィルタスタックがまさに中断しようとしていることを関連するプロトコルスタックに通知することができる。次いで、抽象インタフェースは、そのフィルタスタックを中断することができる。フィルタスタックの中断は、現在のフィルタスタック内の各フィルタインスタンスに関連する「ポーズ」モジュールを呼び出すことを伴ってもよい。全てのフィルタインスタンスが一旦中断されると、新たなフィルタインスタンスをフィルタスタック内の適切な位置に挿入することができる。抽象インタフェースは、次に、フィルタスタックが開始されようとしていること、および新たに追加されたフィルタインスタンスの機能を含むことを全てのプロトコルに通知することができる。次いで、新たなフィルタスタックがスタートする。このことは、新たなフィルタスタック内の各フィルタモジュールに関連する「スタート」モジュールを呼び出すことを伴ってもよい。
【００１７】
フィルタスタックへのフィルタインスタンスの挿入の際、抽象インタフェースは、「フィルタハンドル」を有する関連するフィルタドライバにパラメータを送信することができる。フィルタハンドルは、本質的に、フィルタインスタンスに関連するデータを抽象インタフェースに送るためにフィルタドライバが用いることができる、返信アドレスである。受信されたパラメータを用いて、フィルタドライバは「フィルタコンテキスト」を生成し、関連するフィルタインスタンスのための資源を割り当てる。次いで、関連したフィルタインスタンスのフィルタコンテキストは、抽象インタフェースに送られる。フィルタコンテキストは、本質的に、対応するフィルタインスタンスに関するフィルタドライバにデータを送るために抽象インタフェースが用いることができる、返信アドレスである。
【００１８】
フィルタインスタンスは、受信したパラメータに応じてフィルタスタックに挿入することができる。フィルタドライバは、抽象インタフェースにステータスコードを送信し、そのコードにより、フィルタインスタンスをフィルタスタックに挿入しようとした結果を示すことができる。同一のフィルタの複数の独立したフィルタインスタンスは、異なるフィルタハンドルを用いて、フィルタスタックにインストールすることができる。以上の全てのオペレーションは、関連したプロトコルスタックを崩壊させ、または関連するオペレーティングシステムをリセットする恐れを軽減するように実行される。
【００１９】
データの実際の送信の間、フィルタインスタンスは、フィルタインスタンスによって受信した入力データパケットの特性に基づき、関連する内部のフィルタリングオペレーションの、全てではないがいくつかを実行することができる。例えば、フィルタインスタンスがＩＰパケットを受信するとき、そのフィルタインスタンスがＩＰＸパケットを受信するなら実行されることのない一定のフィルタリングオペレーションをそのフィルタインスタンスが実行することができる。フィルタインスタンスは、パケットが、データパスや制御パスのような通信パスに関連するフィルタインスタンスを完全にバイパスする「バイパス」モードでインスタンスが動作するように構成することもできる。これによって、プロセッサ資源が無関係なフィルタリングオペレーションを実行するために使用されることがないため、フィルタリングプロセスの効率化が高められる。
【００２０】
本発明の更なる特徴と優位点は、以下の記載に示され、および一部は記載から明らかであり、あるいは本発明の実施から得ることができるであろう。本発明の特徴と優位点は、特許請求の範囲において特に指摘された装置および組み合わせによって実現し得ることができる。本発明のこれらの特徴および他の特徴は、以下の詳細な説明および特許請求の範囲からさらに完全に明らかになり、あるいは以下に示される本発明の実施によってわかることができる。
【００２１】
本発明の上述のおよびその他の優位点と特徴を得ることができる形態を記載するため、以上に簡潔に述べた本発明のより特定の記載を、添付された図面に示される具体的実施形態を参照して行うものとする。これらの図面は、本発明の典型的な実施形態のみを示しており、その範囲を限定するものとは考えるべきでないことを理解すれば、本発明は、以下に添付する図面を用いて、さらに明確および詳細に記載され説明されるであろう。
【００２２】
【発明の実施の形態】
本発明の範囲は、プロセッサおよびネットワーク資源を保護するような方法でデータパケットをフィルタリングするためのシステム、方法およびコンピュータプログラムプロダクトまで及ぶ。抽象インタフェースは、１つまたは複数のフィルタインスタンスを含むフィルタスタックを制御する。各フィルタインスタンスは、ネットワークを介して送受信されるデータパケットに関するフィルタリングオペレーションを実行することができる。フィルタインスタンスは、データパケットの特性に基づいて異なるフィルタリングオペレーションを実行することができ、あるいはパケットのよってフィルタインスタンスを完全にバイパスすることができる。さらに、関連するプロトコルスタックを再起動させなければならない機会を減らすように、フィルタインスタンスをフィルタスタックに追加したり、フィルタスタックから除去したりすることができる。それぞれ種々のフィルタリングオペレーションを実行することができるフィルタインスタンスを容易に交換することによって、多くの種々のフィルタリングを選択することができる。
【００２３】
フィルタインスタンスを追加し、またはフィルタスタックから除去するため、まずフィルタスタックをポーズすることができる。フィルタスタックをポーズすることは、そのフィルタスタックに含まれる個々のフィルタインスタンスをポーズすることを含む。フィルタスタックをポーズしようとするときは、フィルタスタックを用いてフィルタリングオペレーションを実行するプロトコルスタックを通知することができる。フィルタスタックがポーズされると、フィルタドライバは、抽象インタフェースをコールしてフィルタインスタンスの挿入または除去を行うことができる。フィルタインスタンスが挿入または除去された後、関連するプロトコルスタックは、フィルタスタックの新たなコンフィグレーションを通知される。
【００２４】
オペレーションの間、抽象インタフェースは、トランスポートレイヤとデータリンクレイヤとの間で動作して、フィルタスタックへのデータパケットの送信を管理する。抽象インタフェースは、データリンクレイヤからデータパケットを受信すると、そのデータリンクレイヤに最も近いフィルタインスタンスで開始するフィルタスタックにそのデータパケットを渡す。ついで、抽象インタフェースは、データパケットが全てのフィルタモジュールを通って渡されるまで、トランスポートレイヤに順次に近い各フィルタインスタンスにデータパケットを渡す。それから、抽象インタフェースはフィルタされたデータパケットをトランスポートレイヤへ送信する。
【００２５】
抽象インタフェースは、トランスポートレイヤからデータパケットを受信すると、これらのオペレーションを本質的に逆の順序で実行する。抽象インタフェースは、トランスポートレイヤに最も近いフィルタインスタンスで開始するフィルタスタックにデータパケットを渡す。次に、抽象インタフェースは、データパケットが全てのフィルタインスタンスを通って渡されるまで、データリンクレイヤに順次に近い各フィルタインスタンスへデータパケットを渡す。それから、抽象インタフェースは、フィルタされたデータパケットをデータリンクレイヤに送信する。
【００２６】
フィルタスタックを介しての送信の間、異なるデータパケットは、種々のフィルタリングオペレーションによって、フィルタされることができる。これは、データパケットの特性に起因するものとすることができる。たとえば、ＩＰパケットは、ＩＰＸパケット以外の方法でフィルタにかけられるであろう。種々のフィルタリングオペレーションで異なるデータパケットをフィルタすることもまた、データパケットのフローの方向に起因するのである。すなわち、種々のフィルタリングオペレーションは、トランスポートレイヤからデータリンクレイヤへ送信されるデータパケットに関するよりも、データリンクレイヤからトランスポートレイヤへ送信されるデータパケットに関して実行されるであろう。
【００２７】
あるデータフローの方向では、データパケットが完全にフィルタインスタンスをバイパスするのに対し、もう一方の方向のデータフローでは、パケットが完全にはフィルタインスタンスをバイパスしない可能性がある。例えば、データリンクレイヤからトランスポートレイヤに運ばれるデータパケットは、完全にフィルタインスタンスをバイパスすることができるが、トランスポートレイヤからデータリンクレイヤに運ばれるパケットは、そのフィルタインスタンスによってフィルタされる。データパケットに加えて、フィルタスタックもまた、そのフィルタスタックを通過する制御情報が完全にフィルタインスタンスをバイパスするように構成することができる。
【００２８】
本発明の実施形態は、以下でより詳細に議論するように、種々のコンポーネントを含む専用のまたは汎用のコンピュータを備える。本発明の範囲内にある実施形態は、コンピュータ実行可能な命令またはデータ構造を搭載し、またはストアするためのコンピュータ読み取り可能な媒体を含むことができる。このようなコンピュータ読み取り可能な媒体は、汎用または専用コンピュータによってアクセス可能な如何なる媒体とすることもできる。例示の目的で、しかしこれには制限されないが、このようなコンピュータ読み取り可能な媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたはその他の光ディスク記憶、磁気ディスク記憶その他の磁気記憶装置、またはその他コンピュータ実行可能命令またはデータ構造の形式で所望のプログラムコード手段を搭載し、またはストアするために用いることができ、かつ汎用または専用コンピュータによってアクセス可能な如何なる媒体をも備えることができる。
【００２９】
ネットワークまたはその他の通信接続（有線（ｈａｒｄｗｉｒｅｄ）、無線、または有線と無線との組み合わせ）を介して、情報がコンピュータに送信あるいは供給されるとき、そのコンピュータは、その接続をコンピュータ読み取り可能な媒体とみなす。したがって、正式には、このような接続は、コンピュータ読み取り可能な媒体と称される。上記の組み合わせもまた、コンピュータ読み取り可能な媒体の範囲に含まれるであろう。例えば、コンピュータ実行可能な命令は、汎用コンピュータ、専用コンピュータまたは専用処理装置に、一定の関数または関数の組を実行させることができる命令およびデータを備える。
【００３０】
図１および以下の議論は、本発明を実現するのに適したコンピューティング環境について、簡潔で一般的な説明を提供しようとするものである。要求されるわけではないが、本発明は、コンピュータ実行可能な命令、例えばネットワーク環境内のコンピュータによって実行されるプログラムモジュールなどの一般的なコンテキストで記述されるであろう。一般的に、プログラムモジュールは、特定のタスクを実行し、あるいは特定の抽象データタイプを実装するルーチン、プログラムオブジェクト、コンポーネント、データ構造、その他を含む。コンピュータ実行可能な命令、これに伴うデータ構造およびプログラムモジュールは、本明細書で開示された方法のステップを実行するためのプログラムコード手段の例を示している。これらの実行可能な命令または関連するデータ構造の特定のシーケンスは、これらのステップで記述された関数を実現するのに対応する動作（ａｃｔ）の例を示している。
【００３１】
本発明は、パーソナルコンピュータ、ハンドヘルド装置、携帯電話、パーソナルデジタルアシスタント（ＰＤＡ）、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能なコンシューマ電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータその他を含む多くの種類のコンピュータシステム構成を持つネットワークコンピューティング環境で実施することができることを本技術分野の当業者は、理解するであろう。本発明は、また、ローカルおよびリモートの処理装置が通信ネットワークを介して（有線、無線または有線または無線の組み合わせによって）接続され、ローカルとリモートの双方の処理装置ともタスクを実行する分散コンピューティング環境で実施することができる。
【００３２】
図１を参照すると、本発明を実施するための例示のシステムは、プロセッシングユニット１２１、システムメモリ１２２、およびシステムメモリ１２２を含む種々のシステムコンポーネントをプロセッシングユニット１２１に接続するシステムバス１２３を有する、従来のコンピュータ１２０の形式で汎用コンピューティング装置を含む。システムバス１２３は、メモリバスまたはコントローラ、ペリフェラルバスおよび種々のバス構造のいずれかを使用するローカルバスを含む数種類のバス構造のいずれとすることもできる。システムメモリ１２２は、読取専用メモリ（「ＲＯＭ」）１２４およびランダムアクセスメモリ（「ＲＡＭ」）１２５を含むことができる。基本入出力システム（「ＢＩＯＳ」）１２６は、コンピュータ１２０内にある要素間で、例えばスタートアップ時のように情報送信を支援する基本的なルーチンを含み、ＲＯＭ１２４に格納することができる。
【００３３】
コンピュータ１２０は、また、磁気ハードディスク１３９と読み書きを行うための磁気ハードディスクドライブ装置１２７、取外し可能な磁気ディスクと読み書きを行うための磁気ディスクドライブ装置１２８、およびＣＤ−ＲＯＭやその他の光ディスク媒体などの取外し可能な光ディスク１３１と読み書きを行うための光ディスクドライブ装置１３０を含む。磁気ハードディスクドライブ装置１２７、磁気ディスクドライブ装置１２８および光ディスクドライブ装置１３０は、それぞれ、ハードディスクドライブインタフェース１３２、磁気ディスクドライブインタフェース１３３および光ドライブインタフェース１３４によって、システムバス１２３に接続される。ドライブ装置とこれらに結合したコンピュータ読み取り可能な媒体は、コンピュータ１２０のためのコンピュータ実行可能な命令、データ構造、プログラムモジュールその他のデータの不揮発性記憶を提供する。本明細書に記載された例示の環境では、磁気ハードディスク１３９、取外し可能な磁気ディスク１２９および取外し可能な光ディスク１３１が用いられているが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌイカートリッジ、ＲＡＭ，ＲＯＭその他を含む記憶データのためのコンピュータ読み取り可能なその他のタイプの媒体を使用することができる。
【００３４】
１つまたは複数のプログラムモジュールを備えるプログラムコード手段は、ハードディスク１３９、磁気ディスク１２９、光ディスク１３１、ＲＯＭ１２４、またはＲＡＭ１２５上に格納することができ、オペレーティングシステム１３５、１つまたは複数のアプリケーションプログラム１３６、その他のプログラムモジュール１３７およびプログラムデータ１３８を含む。ユーザは、キーボード１４０、ポインティング装置１４２または他の入力装置、例えば、マイク、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどの装置（図示せず）を通して、コンピュータ１２０にコマンドおよび情報を入力することができる。以上のおよびその他の入力装置は、しばしばシステムバスに結合したシリアルポートインタフェース１４６を介してプロセッシングユニット１２１に接続される。入力デバイスは、以上に代えて、他のインタフェース、例えば、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（「ＵＳＢ」）によっても接続することができる。モニタ１４７あるいはその他の表示装置もまた、ビデオアダプタ１４８のようなインタフェースを介してシステムバス１２３に接続している。モニタに加えて、パーソナルコンピュータは、通常、スピーカやプリンタなどの他の周辺出力装置（図示せず）を含む。
【００３５】
コンピュータ１２０は、リモートコンピュータ１４９ａおよび１４９ｂのような１つまたは複数のリモートコンピュータとの論理的接続を用いたネットワーク環境においても動作することができる。リモートコンピュータ１４９ａおよび１４９ｂは、各々もう１つのパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア機器またはその他の通常のネットワークノードとすることができる。図１では、メモリ記憶装置１５０ａと１５０ｂおよびそれらに格納されたアプリケーションプログラム１３６ａと１３６ｂが示されているだけだが、リモートコンピュータ１４９ａおよび１４９ｂは、コンピュータ１２０に関して記述されている要素のすべてまたは多くを含むことができる。図１に示される論理的接続は、ローカルエリアネットワーク（ＬＡＮ）１５１と広域ネットワーク（ＷＡＮ）１５２を含むが、これは例示の目的で示しただけでありこれに限定されない。このようなネットワーク環境は、オフィス内や企業内のコンピュータネットワーク、イントラネットおよびインターネットでは通常のものである。
【００３６】
ＬＡＮネットワーク環境で使用されるとき、コンピュータ１２０は、ネットワークインタフェースアダプタ１５３または同様のアダプタを介してローカルネットワーク１５１に接続する。ＷＡＮネットワーク環境で使用されるとき、コンピュータ１２０は、インターネットのような広域ネットワーク上の通信を確立するためのモデム１５４、無線リンクまたはその他の手段を含むことができる。モデム１５４は、内部または外部とすることができるが、シリアルポートインタフェース１４６を経由してシステムバス１２３に接続される。ネットワーク化された環境では、コンピュータ１２０に関して描写されたプログラムモジュールあるいはその部分は、リモートのメモリ記憶装置に格納することができる。示されたネットワーク接続は例示的であり、広域ネットワーク１５２上で通信を確立するその他の手段を使用できることが理解されるであろう。
【００３７】
本発明の詳細な説明および特許請求の範囲において、「ダミールーチン」とは、如何なるタスクも実行しないルーチンと定義する。ダミールーチンは、データを受信するために用いられるヘッダを含むが、受信するデータに関するオペレーションは何も実行しないプログラムモジュールまたはコンピュータ実行可能な命令のセットの一部とすることができる。すなわち、ダミールーチンからのデータ出力は、ダミールーチンに入力されたデータと同じである。
【００３８】
本発明の詳細な説明および特許請求の範囲において、「エントリポイント」とは、プログラムモジュールまたはコンピュータ実行可能な命令のセットの一部における位置と定義する。外部のプログラムモジュールは、エントリポイントをコールし、入力データを送信して、エントリポイントで示される命令の実行を容易にすることができる。例えば、ダミールーチンはエントリポイントを持つことができる。
【００３９】
本発明の詳細な説明および特許請求の範囲において、「システムレジストリ」とは、システム構成情報を格納するためにオペレーティングシステムによって用いることができるデータベースと定義する。
【００４０】
本発明によれば、関連するプログラムデータに加え、データパケットをフィルタすることを容易にするために用いられる抽象インタフェース、フィルタスタック、フィルタインスタンスおよびフィルタドライバを含むプログラムモジュールを、コンピュータ１２０に関連した、いずれかのコンピュータ読み取り可能な媒体にストアし、およびこの媒体からアクセスすることができる。例えば、抽象インタフェース、フィルタスタック、フィルタインスタンス、フィルタドライバ、および関連するプログラムデータの部分をオペレーティングシステム１３５、アプリケーションプログラム１３６、その他のプログラム１３７および／またはプログラムデータ１３８に含めて、データパケットのフィルタリングに関連するプログラムモジュールは、前述のように分散型環境においても実行することができる。例えば、リモートコンピュータ１４９ａまたは１４９ｂのようなリモートコンピューティング装置に含まれるフィルタドライバによって、コンピュータ１２０のようなローカル処理装置に含まれるフィルタスタックにフィルタインスタンスを挿入することが容易となるであろうし、またその逆も同様である。
【００４１】
図２Ａには、フィルタインスタンスをフィルタスタックに挿入することを容易にするために用いられる機能コンポーネントのいくつかが示される。図示されるように、コンピュータ２０１は、ネットワーク２０５に通信可能なように結合される。コンピュータ２０１とコンピュータ２０５との間で転送されるパケットは、トランスポートレイヤプロトコル２０２、抽象インタフェース２０３およびデータリンクドライバ２０４を含む通信パスを通って送られるであろう。コンピュータ２０１は、図１の議論で参照したコンポーネントのいずれをも含むことができる。ネットワーク２０５は、図１の議論で参照したネットワーク環境のいずれをも含むことができる。
【００４２】
抽象インタフェース２０３は、フィルタスタック２０６およびフィルタドライバ２１０と通信することができる。データパケットを受信すると、抽象インタフェース２０３は、そのデータパケットをフィルタスタック２０６に含まれる各フィルタインスタンスに転送することができる。データパケットがトランスポートレイヤプロトコル２０２から受信された場合、抽象インタフェース２０３は、そのデータパケットをフィルタインスタンス２０７ａに渡し、データリンクドライバ２０４により近い他のフィルタモジュールに順次わたすことができる。データパケットが、データリンクドライバ２０４から受信された場合、抽象インタフェース２０３は、そのデータパケットをフィルタインスタンス２１１ａに渡し、トランスポートレイヤプロトコル２０２により近い他のフィルタモジュールに順次わたすことができる。
【００４３】
抽象インタフェース２０３はフィルタドライバ２１０と通信を行い、フィルタインスタンスをフィルタスタック２０６に挿入、またはフィルタスタック２０６から除去することを容易にすることができる。フィルタドライバ２１０に含まれるのは、フィルタ挿入モジュール２２０、フィルタスタートモジュール２２１およびフィルタポーズモジュール２２２である。図２Ｂに示すのは、フィルタインスタンスをフィルタスタックに挿入することを容易にするための図２Ａで示した関数コンポーネント間で生じる相互作用のいくつかの例である。図３は、フィルタインスタンスをフィルタスタックに挿入するための方法を示すフロー図である。図３に示す方法は、図２Ａおよび図２Ｂに含まれる関数コンポーネントに関連して議論する。
【００４４】
図３に示すように、フィルタインスタンスの挿入は、フィルタスタックのオペレーションをポーズすることによって開始することができる（動作３０１）。これは、そのフィルタスタック内で現在オペレート中の個々のフィルタインスタンスをポーズすることも含む。フィルタインスタンスは、結合したポーズモジュールをコールすることによってポーズすることができる。例えば、フィルタポーズモジュール２２２は、フィルタドライバ２１０によってフィルタスタックに挿入されたフィルタインスタンスのポーズを容易にすることができる。プロトコルスタックは、フィルタスタックがポーズされようとしていることを通知することができる。
【００４５】
図２Ａに示すように、フィルタスタック２０６は、フィルタ２１０ａを含むが、それは以前フィルタドライバ２１０によってフィルタスタック２０６に挿入されたものかもしれない。抽象インタフェース２０３は、データをフィルタポーズモジュール２２２に渡して、フィルタインスタンス２１０ａ（またはフィルタドライバ２１０によってフィルタスタック２０６に挿入されたその他のフィルタインスタンス）をポーズの状態にする。フィルタインスタンスがポーズ状態にされると、フィルタドライバは、一定のオペレーションを実行することができる。例えば、フィルタドライバは、キューに入れられたフィルタインスタンスに関連したパケットを処理させ（ｆｌｕｓｈ）、そのフィルタインスタンスに伴うその他のランタイムオペレーションを停止させ、およびフィルタインスタンスによって未処理のパケットおよびリクエストが処理されるまで、そのフィルタインスタンスがポーズ状態になるのを遅延させることもできる。
【００４６】
フィルタインスタンスは、逐次的にポーズすることができる。例えば、トランスポートレイヤプロトコル２０２に最も近いフィルタインスタンスが、まずポーズされるであろう。図２Ａに示すように、フィルタインスタンス２０７ａは、ポーズされる最初のフィルタインスタンスとなるであろう。トランスポートレイヤプロトコル２０２に最も近いフィルタインスタンスのポーズが成功した後、次に近いフィルタインスタンス（すなわちフィルタインスタンス２０８ａ）がポーズされる。この例で、全体のフィルタスタックをポーズしようとする場合、残りのフィルタインスタンスは次の順序でポーズされるであろう：２０８ｂ、２０９ａ、２１０ａおよび２１１ａ。データリンクレイヤに最も近いフィルタインスタンス２１１ａをポーズ状態にすることに成功すると、フィルタスタック２０６もまた、ポーズ状態にあるとみなすことができる。プロトコルスタックは、フィルタスタック２０６がポーズに成功したとの通知を受けることができる。
【００４７】
フィルタインスタンスは、データパケットの送信、受信およびリクエストを容易にするために用いられるモジュールである「ルーチンハンドラ」を伴うことができる。一実施形態では、フィルタインスタンスをポーズすることには、ダミールーチンを有するルーチンハンドラをスワップすることを含めることもできる。したがって、データパケットは、実際のルーチンハンドラに代わってダミールーチンを介して送信される。例えば、データパケットは、データパケットを受信するためのルーチンハンドラではなく、ダミールーチンに送信されるかもしれない。スワップは、フィルタインスタンスがポーズ状態にあるとき、新たに如何なるパケットも処理する必要がないように、抽象インタフェースによって実行される。
【００４８】
フィルタインスタンスのオペレーションを構成する際、フィルタインスタンスをポーズする必要があるかもしれない。特定のフィルタインスタンスをポーズすることは、フィルタスタックを部分的にポーズすることによって実行することができる。すなわち、フィルタスタック内の一部のフィルタインスタンスは、その他のフィルタインスタンスがオペレートを続けている間ポーズする。このような状態では、トランスポートレイヤにより近いフィルタインスタンスがポーズされ、データリンクレイヤにより近いフィルタインスタンスがポーズされないであろう。これは、トランスポートレイヤにより近いフィルタインスタンスが、データリンクレイヤにより近いフィルタインスタンスの前にポーズされる場合に逐次的に行うことができる。
【００４９】
例えば、図２Ａにおいて、フィルタスタック２０６の全てのフィルタインスタンスは、現在オペレート可能であると仮定する。フィルタインスタンス２０８ｂがコンフィグレーションパラメータを受信しようとしている場合、フィルタインスタンス２０７ａがポーズし、次いで、フィルタ２０８ａがポーズし、さらに２０７ｂがポーズする。しかし、フィルタインスタンス２０８ｂのコンフィグレーションの間、フィルタインスタンス２０９ａ、フィルタインスタンス２１０ａおよびフィルタインスタンス２１１ａを含むその他のデータリンクレイヤにより近いフィルタインスタンスは、オペレーションを続けることができる。
【００５０】
部分的にポーズされたフィルタスタックを再スタートさせるためには、ポーズされたもののうち、まず、よりデータリンクレイヤに近いフィルタインスタンスが、次いで、逐次的にトランスポートレイヤに近いフィルタインスタンスが再スタートされであろう。前段の例においていえば、フィルタインスタンス２０８ｂが再スタートし、次いでフィルタインスタンス２０８ａが再スタートし、さらにフィルタインスタンス２０７ａが再スタートするであろう。
【００５１】
図３の方法は、フィルタスタックに含まれるオペレーションを再構成するためのステップを含むことができる（ステップ３０４）。これは、少なくとも１つのプロトコルスタックがデータ送信し（動作３０２）、およびフィルタスタックのオペレーションをスタートする（動作３０３）ことが可能な間、フィルタインスタンスをフィルタスタックに挿入する動作を実行することを含むことができる。プロトコルスタックがデータ送信をすることが可能な間にフィルタインスタンスの挿入を行うことによって、通信パスに沿った効率的なデータ送信が促進される。
【００５２】
フィルタインスタンスをフィルタスタックに挿入することは、フィルタドライバが抽象インタフェースからパラメータを受信することを含むことができる。図２Ｂの矢印１は、抽象インタフェース２０３がパラメータをフィルタドライバ２１０に送信することを示す。フィルタ２１０に送信されるパラメータは、生成されたフィルタインスタンスを参照するために、用いることができるフィルタハンドルを含む。例えば、フィルタインスタンス２１０ｂを生成するため矢印１に含まれるパラメータが用いられる場合、フィルタドライバ２１０はそのフィルタハンドルを用いて、フィルタインスタンス２１０ｂに対応するデータを抽象インタフェース２０３に送信することができる。パラメータには、フィルタスタック中の、フィルタインスタンスが挿入されるべき位置を含めることもできる。例えば、図２Ｂにおいて、フィルタドライバ２１０はパラメータを受信したが、それは、フィルタインスタンス２１０ｂがフィルタインスタンス２０８ｂと２０９ａの間に挿入されるべきことを示している。
【００５３】
フィルタインスタンスをフィルタスタックに挿入することには、フィルタインスタンスコンテキストを生成することを含めることができる。図２Ｂの矢印２は、コンテキスト生成モジュール２３０がフィルタインスタンス２１０ｂのためのフィルタインスタンスコンテキストを生成することを示す。１つのフィルタスタックには、１つのフィルタの複数のインスタンスを挿入することができる。例えば、図２Ｂには、フィルタインスタンス２０８ａと２０８ｂが示されている。同一のフィルタドライバが、フィルタインスタンス２０８ａと２０８ｂとをフィルタスタック２０６に挿入することができた。しかし、フィルタインスタンス２０８ａと２０８ｂとは、生成するのに用いられたパラメータによって異なるであろう。フィルタインスタンスコンテキストは、同一のフィルタドライバによって生成されたフィルタインスタンス、例えばフィルタインスタンス２０８ａと２０８ｂを識別するために用いることができる。
【００５４】
フィルタインスタンスをフィルタスタックに挿入することには、そのフィルタインスタンスのための資源を割り当てることを含めることができる。図２Ｂ矢印３は、資源割り当てモジュール２３１が、フィルタインスタンス２１０ｂのための資源を割り当てることを示す。これは、フィルタインスタンスがオペレートするためメモリを割り当てること、およびフィルタインスタンスによって処理するためのデータパケットをキューに入れるためメモリを割り当てることを含めることができる。これらは、フィルタインスタンスをフィルタスタックに挿入する際割り当てることができる資源の単なる例に過ぎない。本記載を再検討した後には、種々の資源をフィルタインスタンスによって使用するため割り当てることができることは、本技術分野の当業者にとって明らかであろう。
【００５５】
フィルタインスタンスをフィルタスタックに挿入することには、フィルタインスタンスコンテキストを抽象インタフェースに送信することを含めることができる。図２Ｂの矢印４は、フィルタドラバ２１０が、フィルタインスタンス２１０ｂのためのフィルタインスタンスコンテキストを抽象インタフェース２０３に送信することを示す。抽象インタフェース２０３は、フィルタインスタンス２１０ｂへの参照としてフィルタインスタンスコンテキストを用いることができる。例えば、抽象インタフェース２０３がフィルタインスタンス２１０ｂに処理されたデータをフィルタドライバ２１０に送信するとき、抽象インタフェース２０３は、フィルタインスタンスコンテキストを含むことができる。抽象インタフェース２０３は、フィルタインスタンスコンテキストを用いて、フィルタドライバ２１０に、受信したデータがフィルタインスタンス２１０ｂに処理されていることを通知することができる。
【００５６】
フィルタインスタンスをフィルタスタックに挿入することには、コンフィグレーション可能なパラメータをシステムレジストリから読むことを含めることができる。図２Ｂの矢印５は、コンフィグレーション可能パラメータアクセスモジュール２３３が、コンフィグレーション可能パラメータをシステムレジストリ２２３から読み込むことを示す。コンフィグレーション可能パラメータアクセスモジュール２３３は、従前受信したコンフィグレーションハンドルを用いて、システムレジストリにアクセスすることができる。コンフィグレーションハンドルは、コンフィグレーション可能パラメータアクセスモジュール２３３を、システムレジストリのフィルタインスタンス２１０ｂに関連するパラメータが存在する部分に導くポインタとすることができ、またはその他のアドレッシング方法とすることもできる。システムレジストリの読み込みには、フィルタインスタンスを表す識別番号の読み込みを含めることができる。
【００５７】
一実施例において、フィルタドライバは、図２Ｂの矢印１のようにパラメータを送る際、コンフィグレーションハンドルをそのフィルタドライバに送信することができる抽象インタフェースに登録する。抽象インタフェースは、レジストレーションを管理し、あるいはレジストレーションをシステムレジストリに渡すことができる。これに替えて、フィルタドライバが、データをシステムレジストリに直接登録することができる。
【００５８】
フィルタインスタンスをフィルタスタックに挿入することには、受信したパラメータに基づいてフィルタインスタンスを構成することを含めることができる。受信したパラメータは、抽象インタフェースから受信することができ、またシステムレジストリから読み込むこともできる。図２Ｂの矢印６は、フィルタ挿入モジュール２２０が、パラメータを送信してフィルタインスタンス２１０ｂを構成することを示す。フィルタインスタンスは、種々のフィルタリングオペレーションを実行するように構成することができるが、このオペレーションには、例えばデータパケットのモニタ、除去、挿入および／またはデータパケット中のデータの変更、データパケットに含まれるアドレスの検証、データパケットの圧縮、データパケットの暗号化またはこれらのいずれかの組み合わせが含まれる。
【００５９】
フィルタインスタンスは、仮想私設通信網（「ＶＰＮ」）を介して送信されるデータパケットをフィルタにかけるために構成することができる。たとえば、ネットワーク２０５上でデータパケットは、物理的な実体を持たない仮想的な接続を用いることで送信することができる。データパケットは正確な目的地に順に届けられるが、送信はアドホック的に種々の装置を経由して行われるかもしれない。すなわち、この接続には、物理的な線は提供されない。
【００６０】
フィルタインスタンスは、また、電源制御（「ＰＭ」）および／またはプラグアンドプレイ（「ＰｎＰ」）データを受信するようにエントリポイントを構成することができる。コンピューティング装置が休止状態のためスタンバイモードに入ると、これを示す電源制御データをフィルタインスタンスに送ることができる。同様に、データパケットのフローに影響する可能性のある周辺機器、例えばネットワークインタフェースカードなどが、コンピューティング機器に挿入される場合、関連するデータをフィルタインスタンスに送信することができる。
【００６１】
一実施形態において、フィルタインスタンスは管理（ｍａｎａｇｅｍｅｎｔ）インタフェースを用いて構成することができる。管理インタフェースは、入力機器を介してフィルタインスタンスに関連するパラメータをユーザが入力するユーザインタフェースを含むことができる。これらのパラメータは、フィルタドライバによって受信され、フィルタインスタンスの構成を容易にする。この一例が、ユーザ構成可能（ｕｓｅｒ  ｃｏｎｆｉｇｕｒａｂｌｅ）ファイヤウォールである。
【００６２】
フィルタインスタンスを構成することには、また、フィルタインスタンスを複数のトランスポートレイヤプロトコルに「バインド」することも含めることができる。フィルタインスタンスは、トランスポートレイヤプロトコルにバインドされると、そのトランスポートレイヤプロトコルに関連するデータパケットをフィルタにかけることができる。例えば、フィルタインスタンス２１０ｂは、図２Ａに示すトランスポートＡとトランスポートＢの双方データパケットをフィルタにかけるように構成することができる。
【００６３】
前述のフィルタインスタンスのコンフィグレーションは単なる例であることが理解されるべきである。本説明を再検討した後に、フィルタインスタンスが多種多様な方法で構成されることは、本技術分野の当業者にとって明らかであろう。
【００６４】
フィルタインスタンスをフィルタスタックに挿入することには、フィルタインスタンスがフィルタスタックに適切に挿入されたことを検証することを含めることができる。これは、挿入ステータスを抽象インタフェースに送信することを含めることもできる。図２Ｂの矢印７および８は、挿入ステータスモジュール２３２が、フィルタインスタンス２１０ｂの挿入ステータスのベリフィケーションを受信し、挿入ステータスを抽象インタフェース２０３に送信することを示す。
【００６５】
図３に戻って、フィルタインスタンスをフィルタスタックに挿入することには、フィルタスタックのオペレーションをスタートすることを含めることができる（動作３０３）。これは、現在ポーズされているフィルタインスタンスをスタートすることを含めることができる。フィルタインスタンスは、これに伴うスタートモジュールをコールすることによってスタートさせることができる。例えば、フィルタスタートモジュール２２１は、フィルタドライバ２１０によってフィルタスタックに挿入された、フィルタインスタンス２１０ａおよび２１０ｂのようなフィルタインスタンスをスタートすることを容易にすることができる。プロトコルスタックには、フィルタスタックがスタートしようとしていることを通知することができる。
【００６６】
抽象インタフェース２０３は、フィルタスタートモジュール２２１にデータを送り、フィルタドライバ２１０によってフィルタスタック２０６に挿入されたフィルタインスタンス２１０ａ、２１０ｂ、またはその他のフィルタインスタンスをオペレーション可能状態にすることができる。フィルタインスタンスは、逐次的にスタートさせることができる。例えば、データリンクドライバ２０４に最も近いフィルタインスタンス（すなわち、フィルタインスタンス２１１ａ）が、最初に実行される。データリンクドライバ２０４に最も近いフィルタインスタンスがスタートに成功した後、次に最も近いフィルタインスタンスをスタートすることができる。図２Ｂに示すように、これは、フィルタインスタンス２１０ａとなるであろう。この例では、残るフィルタインスタンスは、次の順序でスタートするであろう：２０９ａ、２１０ｂ、２０８ｂ、２０８ａおよび２０７ａ。フィルタインスタンス２０７ａがオペレーションジョン可能状態に到達することに成功すると、フィルタスタック２０６もまた、オペレーション可能状態にあるとみなすことができる。フィルタスタックをスタートすることには、また、フィルタスタック２０６によってデータパケットを適切に処理することができるように、ダミールーチンをルーチンハンドラにスワップすることを含めることができる。プロトコルスタックには、フィルタスタック２０６がオペレーション可能であることを通知することができる。
【００６７】
全体的にポーズしているフィルタスタックを部分的に再スタートすることができる。すなわち、フィルタスタック内のフィルタインスタンスのいくつかは、他のフィルタインスタンスがポーズしたままで、再スタートする。これは、フィルタスタック内の特定のフィルタインスタンスが再スタートする際行われるであろう。この状況では、トランスポートレイヤにより近いフィルタインスタンスはポーズしたままであり、データリンクレイヤにより近いフィルタインスタンスが再スタートすることになるであろう。これは、逐次的に行われ、トランスポートレイヤにより近いフィルタインスタンスの前に、データリンクレイヤにより近いフィルタインスタンスが再スタートすることができる。
【００６８】
例えば、図２Ａでは、フィルタスタック２０６内のフィルタインスタンスの全てが、現在ポーズしていると仮定する。フィルタインスタンス２０９ａが再スタートする場合、フィルタインスタンス２１１ａが最初に、次にフィルタインスタンス２１０ａが、さらにフィルタインスタンス２０９ｂがスタートする。フィルタインスタンス２０８ｂ、フィルタインスタンス２０８ａおよびフィルタインスタンス２０７ａを含む、その他のトランスポートレイヤにより近いフィルタインスタンスはポーズしたままとすることができる。
【００６９】
図２Ａおよび２Ｂに示すモジュールおよび矢印は単なる例であることを理解すべきである。異なるモジュールに伴うファンクショナリティは、本発明の精神と範囲を離れない限り組み合わせることができるであろう。例えば、フィルタドライバ２１０は、フィルタインスタンスをフィルタスタックに追加することに伴うオペレーションを実行する単一のモジュールを有することができる。フィルタドライバ２１０は、抽象インタフェース２０３の一部として含まれるかもしれない。同様に、図２Ｂに含まれる矢印で示すファンクショナリティが実行される順序もまた、単なる例示である。図２Ｂに含まれる矢印で示すファンクショナリティは、本発明の精神と範囲を離れない限りで種々の順序で実行される。本説明を再検討した後に、モジュールと結合した機能が種々多様な方法で構成されることは、本技術分野の当業者にとって明らかであろう。
【００７０】
フィルタインスタンスをフィルタスタックに挿入することに加え、本発明の実施形態では、フィルタインスタンスをフィルタスタックから除去することができる。フィルタインスタンスをフィルタスタックから除去する際、フィルタスタックは、前述の方法を用いてポーズし、スタートすることができる。
【００７１】
フィルタインスタンスをフィルタスタックから除去するとき、フィルタドライバは、フィルタインスタンスによって使用するために従前に割り当てられた資源を解放することができる。例えば、抽象インタフェース２０３は、フィルタインスタンス２１０ｂが、フィルタスタック２０６から除去されるべきであることを示して、フィルタドライバ２１０にデータを送信することができる。フィルタスタック２０６はポーズされ、フィルタドライバ２１０はフィルタインスタンス２１０ｂをフィルタスタック２０６から除去するであろう。次に、フィルタドライバ２１０は、フィルタインスタンス２１０ｂによって使用するためアロケートされた資源を解放する。それから、フィルタスタック２０６はスタートする。関係するプロトコルスタックには、フィルタスタックが、フィルタインスタンス２１０ｂの機能を最早含まないことが通知される。
【００７２】
図２Ｃに示すのは、フィルタインスタンスに伴うフィルタリングオペレーションをバイパスすることを容易にすることができる機能コンポーネントのいくつかの例である。フィルタリングオペレーションは、パケットおよび／またはコンフィグレーションの情報に由来する特性に基づいてバイパスすることができる。フィルタリングオペレーションをバイパスすることには、パケットが完全にフィルタインスタンスをバイパスすること、および受信したパケットが１つまたは複数のフィルタインスタンスの内部フィルタリングオペレーションをバイパスすることを含めることができる。図４は、フィルタインスタンスに伴うフィルタリングオペレーションの少なくともいくつかをバイパスするためのメソッドの例を示すフロー図である。図４の方法は、図２Ｃに含まれる機能コンポーネントを参照して議論されるであろう。
【００７３】
図２Ｃには、フィルタインスタンス２１０ｂが示されるが、それはフィルタスタック２０６に含まれる。フィルタインスタンス２１０ｂは、フィルタオペレーション２１６ａ、２１６ｂ、２１６ｃに加え、制御モジュール２１５を含む。図２Ｃには、パケットがトランスポートレイヤからデータリンクレイヤに送信される通信パスが示されている。通信パスは、データパケットをプロトコルスタックが送信するデータパス、または制御パケットをプロトコルスタックが送信する制御パスを含むことができる。
【００７４】
このような制御パスは、リクエストおよび状態表示（ｓｔａｔｕｓ  ｉｎｄｉｃａｔｉｏｎ）を含むことができる。リクエストは、トランスポートレイヤからデータリンクレイヤに送信される。リクエストは、ネットワークインタフェースアダプタ、例えばネットワークインタフェースアダプタ１５３がマルチキャストパケット受け入れるか、または無差別モードに置かれようとしていることの表示を含むことができる。リクエストは、また、質問（ｑｕｅｒｙ）を含むことができる。例えば、リクエストは、ネットワークインタフェースアダプタのメディアアクセス制御アドレスについての質問、またはネットワークインタフェースアダプタが現在マルチキャストパケットを受信しているかどうかについて質問を発することができる。
【００７５】
状態表示は、データリンクレイヤからトランスポートレイヤに送信することができる。状態表示は、データリンクレイヤからの、メディアが現在接続されているという表示、または切断されているという表示を含むことができる。
【００７６】
図４の方法は、入力パケットを処理するという１つの動作（動作４０１）を含むことができる。これは、フィルタ２１０ｂがパケット２４０ａを受信することを含めることができる。図２Ｃで、パケット２４０ａは、フィルタインスタンス２０８ｂから送られる。この図示された実施形態において、パケット２４０ａは、トランスポートレイヤプロトコル２０２からデータリンクドライバ２０４へのデータパスに沿って送信されるであろう。また、制御パスに沿って送信されるパケットはフィルタにかけられるかもしれない。また、パケットは、如何なる順序でもフィルタインスタンスによってはフィルタにかけられないかもしれない。たとえば、パケットは、フィルタインスタンス２０８ａからフィルタインスタンス２１０ａに渡すことができる。入力パケットは、フィルタインスタンスによって生成されたパケットとすることもできる。
【００７７】
これに代わる一実施例において、パケット２４０ｃによって表されるパケットが処理されるであろう。パケット２４０ｃの処理では、パケット２４０ｃが、フィルタインスタンス２１０ｂのフィルタリングオペレーションを完全にバイパスする制御パスまたはデータパスを介して送信されることを決定することができる。図２Ｃに示すように、パケット２４０ｃは、破線の矢印に沿ってフィルタインスタンス２０８ｂから直接フィルタインスタンス２０９ａに送信される。パケット２４０ｃは、フィルタインスタンス２１０ｂが、データパスまたは制御パスに対してバイパスモードでオペレートするように構成されていたことから、フィルタインスタンス２４０ｂをバイパスすることができる。
【００７８】
フィルタインスタンスは、バイパスモードでオペレートするように抽象インタフェース２０３によって構成することができる。フィルタインスタンスは、最初にスタートした初期または実行中にバイパスモードに構成することもできる。すなわち、バイパスモードに初期化されなかったフィルタインスタンスは、後にバイパスモードでオペレートするように設定することができる。初期化の間、フィルタドライバは、スタートプロセス中にそのデータパスに対するＮＵＬＬハンドラを示すことによって、フィルタインスタンスを１つまたは複数のデータパス、または制御パスに対するバイパスモードでスタートさせようとしていることを示す。
【００７９】
初期化の後の実行時に、フィルタドライバは、いくつかのデータパスまたは制御パスに対し、フィルタインスタンスをバイパスモードに設定しようとすることができる。この場合、フィルタドライバは、抽象インタフェースにそのフィルタインスタンスを再スタートするよう要請するであろう。次いで、抽象インタフェースは、本明細書で既に示した方法にしたがって、そのフィルタインスタンスをポーズし、および再スタートするであろう。フィルタインスタンスが再スタートする際、フィルタドライバは、フィルタインスタンスがいくつかのデータパスまたは制御パスに対しバイパスモードでオペレートしようとしていることを、そのバイパスされたパスに対するＮＵＬＬハンドラを提供することによって示す。
【００８０】
フィルタインスタンスは、いくつかのデータパスまたは制御パスに沿って処理されるパケットによってバイパスされ、およびその他のデータパスまたは制御パスに沿って処理されるパケットを受信するように構成することができる。例えば、あるフィルタインスタンスは、状態表示をバイパスし、さらにその他の全てのタイプのパケットを受信するように構成することができる。これは、不活性（ｄａｍｐｅｎ）メディア切断メッセージに対して行うことができるが、このメッセージはアプリケーションに注目されない。その他の例では、データパスに沿ってトランスポートレイヤからデータリンクレイヤに送信されるデータパケットは、フィルタインスタンスをバイパスする一方、データパスに沿ってデータリンクレイヤからトランスポートレイヤに送信されるデータパケットは、フィルタインスタンスによって受信することができる。
【００８１】
同様に、あるデータパスまたは制御パスに対して現在バイパスモードにあるフィルタインスタンスは、実行中に、そのデータパスまたは制御パスについてパケットを受信するように構成することができる。これらの場合、フィルタドライバは、抽象インタフェース２０３にフィルタインスタンスの再スタートを要請することができる。次に、抽象インタフェース２０３は、本明細書で既に示した方法にしたがって、そのフィルタインスタンスをポーズし、および再スタートするであろう。フィルタインスタンスが再スタートすると、フィルタドライバは、フィルタインスタンスがデータパスまたは制御パスからパケットを受信しようとしていることを、起動されたデータパスに対するノンＮＵＬＬハンドラを提供することによって示す。
【００８２】
バイパスモードでオペレートするように、またはパケットを受信するようにフィルタインスタンスを構成することは、エクスターナルイベントによって行うことができる。例えば、ユーザは、ファイヤウォールの管理インタフェースを通して、いくつかのデータパスに対しバイパスモードでオペレートするようにフィルタインスタンスを構成することができる。これは、フィルタインスタンスのフィルタリングオペレーションが、使用の時点でアプリケーションの中断を生じさせる場合に実行することができる。
【００８３】
図４の方法は、フィルタスタックに含まれる全てではないが、いくつかのオペレーションによってフィルタにかけられた出力パケットを送信するためのステップ（ステップ４０４）を含むことができる。これは、フィルタインスタンスの１つまたは複数のフィルタリングオペレーションをバイパスし（動作４０２）、およびフィルタリングオペレーションが実行された場合、入力パケットと異なる可能性のある出力パケットを送信する（動作４０３）動作の実行を含むことができる。フィルタリングオペレーションをバイパスするパケットを送信することは、そのフィルタリングプロセスの効率性を高めるであろう。
【００８４】
フィルタインスタンスの１つまたは複数のオペレーションをバイパスすること（動作４０２）は、フィルタインスタンス２１０ｂに含まれる１つまたは複数のフィルタリングオペレーションをバイパスすることを含む。フィルタインスタンス２１０ｂがデータパケット２４０ａを受信すると、制御モジュール２１５は、データパケット２４０ａの特性を解析する。解析は、入力パケットのデータフローの方向を決定することを含めることができる。データフローの方向は、データリンクドライバからトランスポートレイヤプロトコルへ、またはトランスポートレイヤプロトコルからデータリンクドライバへとすることができる。解析は、また、入力データパケットが処理されるプロトコルを決定するが、それは、例えばＩＰ、ＴＣＰ、インターネットパケット交換（「ＩＰＸ」）、他のトランスポートレイヤプロトコルまたはその他、開放型システム間相互接続（「ＯＳＩ」）モデルのレイヤに規定されたプロトコルとすることができる。制御モジュール２１５がデータパケット２４０ａをＩＰＸで処理することを決定する場合、フィルタオペレーション２１６ａおよび２１６ｃはバイパスされる。しかし、制御モジュール２１５がデータパケット２４０ａをＩＰで処理することを決定する場合、フィルタオペレーション２１６ｂがイパスされる。
【００８５】
以上に替えて、フィルタインスタンス２１０ｂは、あるデータパスまたは制御パスに沿ったパケットが、フィルタインスタンス２１０ｂを完全にバイパスするように構成することができる。図２Ｃに示すように、フィルタインスタンス２１０ｂは、トランスポートレイヤからデータリンクレイヤへのデータパスに沿って送信されるパケットがフィルタインスタンス２１０ｂをバイパスするように構成することができる。パケット２４０ｃがデータパケットである場合、フィルタインスタンス２０８ｂからフィルタインスタンス２０９ａへの破線の矢印が示すように、フィルタインスタンス２１０ｂをバイパスするであろう。
【００８６】
フィルタインスタンス２１０ｂがパケットを受信したにもかかわらず、制御モジュール２１５が、如何なるフィルタリングオペレーションも実施することなく、そのパケットをフィルタインスタンス２１０ｂを通って直接送る場合もまたあるであろう。全てのフィルタリングオペレーションがこの方法でバイパスされる、データパケット２４０ａとデータパケット２４０ｂは、事実上同様のものとなる。
【００８７】
フィルタリングオペレーションが実行された場合、入力パケットと異なった出力パケットを送信すること（動作４０３）には、変更されたデータを含むデータパケットを送信することを含めることができる。フィルタインスタンス２１０ｂに含まれるフィルタリングオペレーションのいずれかが実行される場合、データパケット２４０ｂは、データパケット２４０ａと異なるであろう。これは、フィルタリングオペレーションが、データパケット２４０ａにデータを追加し、データパケット２４０ａからデータを除去し、またはデータパケット２４０ａに含まれるデータを変更した場合に生じる。しかし、フィルタリングオペレーションが実行されなかった場合、データパケット２４０ａとデータパケット２４０ｂとは実質上同様となるであろう。
【００８８】
本発明の方法を用いると、データパケットは、通信パスを介した効率的なデータパケットフローを促進する方法でフィルタにかけることができる。フィルタインスタンスは、そのプロトコルスタックがまだデータ送信が可能であっても、フィルタスタックに挿入し、またはフィルタスタックから除去することができる。これは、フィルタスタックのファンクショナリティが変化しても、プロトコルスタックが再構築されることがないため、プロセッサとネットワークの資源を保護する。フィルタインスタンスは複数のプロトコルで使用することができることから、重複したロジックが１つのコンピューティング装置に実装される可能性が減少する。加えて、データパケットおよび／またはコンフィグレーション情報の特性に基づいてフィルタリングオペレーションをバイパスすることによって、無関係なプロセッサのオペレーションが実行される可能性を減少させる。
【００８９】
本発明は、その精神と本質から離れることなくその他の特定の形式で実現することができる。記載された実施形態は、例示したものに過ぎずこれに限定されるものでないことが全ての点で考慮されなければならない。したがって、本発明の範囲は、上記の実施例等の記載よりもむしろ、特許請求の範囲によって示される。請求項と等価の範囲内の全ての変更は、これら請求項の範囲内に包含されなければならない。
【図面の簡単な説明】
【図１】本発明の適切なオペレート環境を提供する実施例にかかる処理システムを示す図である。
【図２Ａ】フィルタインスタンスをフィルタスタックに挿入することを容易にする機能コンポーネントのいくつかのうちの一実施例を示す図である。
【図２Ｂ】フィルタインスタンスをフィルタスタックに挿入することを容易にするための機能コンポーネント間で生じる相互作用のいくつかのうちの一例を示す図である。
【図２Ｃ】フィルタインスタンスに関連するフィルタリングオペレーションをバイパスすることを容易にする、機能コンポーネントのいくつかのうちの一実施例を示す図である。
【図３】フィルタインスタンスをフィルタスタックに挿入する方法の実施例を示すフロー図である。
【図４】フィルタインスタンスに関連するフィルタリングオペレーションの少なくともいくつかをバイパスするための方法の一実施例を示すフロー図である。
【符号の説明】
１２０、２０１  コンピュータ
１２１  プロセッシングユニット
１２２  システムメモリ
１２３  システムバス
１２４  読取専用メモリ
１２５  ランダムアクセスメモリ
１２６  基本入出力システム
１２７  磁気ハードディスクドライブ装置
１２８  磁気ディスクドライブ装置
１２９  取外し可能な磁気ディスク
１３０  光ディスクドライブ装置
１３１  取外し可能な光ディスク
１３２  ハードディスクドライブインタフェース
１３３  磁気ディスクドライブインタフェース
１３４  光ドライブインタフェース
１３５  オペレーティングシステム
１３６  アプリケーションプログラム
１３７  プログラムモジュール
１３８  プログラムデータ
１３９  磁気ハードディスク
１４０  キーボード
１４２  ポインティング装置
１４６  シリアルポートインタフェース
１４７  モニタ
１４８  ビデオアダプタ
１４９  リモートコンピュータ
１５０  メモリ記憶装置
１５１  ローカルネットワーク
１５２  広域ネットワーク
１５３  ネットワークインタフェースアダプタ
１５４  モデム
２０２  トランスポートレイヤプロトコル
２０３  抽象インタフェース
２０４  データリンクドライバ
２０５  ネットワーク
２０６  フィルタスタック
２０７、２０８、２０９、２１１  フィルタインスタンス
２１０  フィルタドライバ
２１５  制御モジュール
２１６  フィルタオペレーション
２２０  フィルタ挿入モジュール
２２１  フィルタスタートモジュール
２２２  フィルタポーズモジュール
２２３  システムレジストリ
２３０  コンテキスト生成モジュール
２３１  資源アロケートモジュール
２３２  挿入ステータスモジュール
２３３  コンフィグレーション可能パラメータアクセスモジュール
２４０  パケット
【図１】
0004071098.tif 000002
【図２Ａ】
0004071098.tif 000003
【図２Ｂ】
0004071098.tif 000004
【図２Ｃ】
0004071098.tif 000005
【図３】
0004071098.tif 000006
【図４】
0004071098.tif 000007