(57)【要約】【課題】ユーザモードで動作するリスナが、システムメモリやその他の機密サービスまたはコンポーネントを公開することなく、クライアント接続の制御をネットワークコンポーネント（ＮＣ）にディスパッチできるようにする。【解決手段】例えば、クライアントコンポーネント（ＣＣ）がユーザモードのリスナとの接続を介してＮＣへのアクセスを要求する。クライアント要求に含まれる情報に基づいて、リスナはコールをアプリケーションプログラムインターフェース（ＡＰＩ）に渡し、このＡＰＩがユーザモードコンテキスト情報を含むデータの第１のセットを返す。リスナはこのデータの第１のセットを要求されたＮＣに渡す。別のコールがデータの第１のセットとソケット複製の要求を含むＡＰＩに対してなされる。このＡＰＩが要求されたソケットの制御をＮＣに返し、それゆえＮＣとＣＣが要求されたソケットを介してユーザモードで直接に通信する。【選択図】図１Ａ
2006216018.tif 000002
【特許請求の範囲】
【請求項１】
クライアントコンポーネントとネットワークコンポーネントとの間の接続をユーザモードで中継するように構成されたネットワークコンピュータシステムのユーザモードリスナにおいて、前記接続の制御を前記ネットワークコンポーネントにユーザモードでディスパッチする方法であって、
ネットワークコンポーネントを要求するクライアントコンポーネントとリスナとの間でソケットを介してユーザモードで接続を確立するアクトと、
前記接続に関連付けられた情報に基づいて前記ソケットの複製を要求するアクトであって、データの第１のセットが受け取られるアクトと、
前記データの第１のセットおよび前記関連付けられた接続情報を前記要求されたネットワークコンポーネントに送るアクトと、
前記ネットワークコンポーネントが前記ソケットの制御を受け入れたことのインジケータを受け取り、それゆえ前記リスナはもはや前記接続について前記クライアントコンピュータから接続データを受け入れず、前記ネットワークコンポーネントと前記クライアントコンポーネントは前記リスナなしで前記接続を介して通信するアクトと
を備えることを特徴とする方法。
【請求項２】
前記クライアントコンポーネントは、クライアントコンピュータシステムにおけるクライアントプロセスであり、前記要求されたネットワークコンポーネントは、別のネットワークコンピュータシステムにおけるネットワークプロセスであり、前記クライアントコンピュータシステムと前記ネットワークコンピュータシステムは、ネットワーク接続を介して接続されることを特徴とする請求項１に記載の方法。
【請求項３】
前記リスナは、ネットワークプロトコルスタックから受け取ったメッセージを要求されたネットワークコンポーネントに中継するように構成されたプロセス、インターフェース、コンポーネント、モジュールのいずれか１つであることを特徴とする請求項１に記載の方法。
【請求項４】
前記ソケットの複製を要求することは、
前記要求されたネットワークコンポーネントのパラメータを含むファンクションコールを第１のアプリケーションサービスに渡すことと、
前記データの第１のセットを前記第１のアプリケーションサービスから受け取ることと
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記第１のアプリケーションサービスへの前記ファンクションコールの前記パラメータは、前記確立された接続に関連付けられた１つまたは複数の状態変数をさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記ソケットの複製を要求することは、前記確立された接続の初期の部分をディスパッチロジックで評価し、前記ディスパッチロジックは、前記データの第１のセットに関連付けられたクライアントメッセージプロパティおよびネットワークコンピュータシステムに関連付けられたシステムプロパティの１つまたは複数を評価することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項７】
前記ネットワークコンポーネントが制御を受け入れたことのインジケータを受け取ることは、前記接続に関連付けられたネットワークスタックに信号を送り、前記信号は、前記リスナがもはや前記確立された接続からのデータを受け取れないことを前記ネットワークスタックのトランスポート層に示すことを備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記信号は、前記ネットワークコンポーネントが前記確立された接続の制御を受け入れるまで前記クライアントコンポーネントによって送られたデータをバッファする命令をさらに備えることを特徴とする請求項７に記載の方法。
【請求項９】
前記信号を前記ネットワークスタックに送った後にクライアントコンポーネントデータの後続のセットを受け取ると、前記リスナが前記クライアントコンポーネントデータの後続のセットを前記ネットワークスタックに返し、それゆえ前記クライアントコンポーネントデータの後続のセットは、前記ネットワークコンポーネントが前記確立された接続の制御を受け入れるまでバッファされることをさらに備えることを特徴とする請求項７に記載の方法。
【請求項１０】
前記ソケットの複製を要求するのに先立ってまたはその間に前記確立された接続におけるクライアントコンポーネントデータの少なくとも初期の部分を前記ネットワークコンポーネントに渡すことをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１１】
ネットワークコンピュータシステムのネットワークコンポーネントにおいて、ユーザモードリスナを介してクライアントコンポーネントと前記ネットワークコンポーネントとの間で接続が確立され、前記ネットワークコンポーネントが前記リスナから前記接続の制御をユーザモードで受け入れる方法であって、
前記ユーザモードリスナを介してクライアントコンポーネントからデータの初期のセットを受け取るアクトと、
前記クライアントコンポーネントと前記確立された接続とに関する情報を識別する接続情報を前記ユーザモードリスナから受け取るアクトと、
前記接続に関連付けられたソケットの複製を要求するアクトと、
前記リスナから前記ソケットの制御を受け入れるアクトであって、前記ネットワークコンポーネントは前記接続を介して前記クライアントコンポーネントとユーザモードで直接に通信するアクトと
を備えることを特徴とする方法。
【請求項１２】
前記ネットワークコンポーネントは、ネットワークコンピュータシステムにおけるネットワークプロセスであり、前記クライアントコンポーネントは、別のクライアントコンピュータシステムにおけるクライアントプロセスであり、前記ネットワークコンピュータシステムと前記クライアントコンピュータシステムは、ネットワーク接続を介して接続されることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記クライアントコンポーネントからの前記データの初期のセットは、共有メモリ、名前付きパイプ、ＲＰＣ、ＤＣＯＭプロトコルの１つまたは複数を介して受け取られることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記ソケットの複製を要求することは、
前記ユーザモードリスナによって中継されたデータの第１のセットのパラメータを含むファンクションコールをアプリケーションサービスに渡すことと、
前記ソケットを制御するための情報を前記アプリケーションサービスから受け取ることと
をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１５】
前記データの第１のセットは、前記リスナによって第１のアプリケーションサービスから受け取られ、前記第１のアプリケーションサービスは、前記ネットワークコンポーネントが前記ファンクションコールを渡す前記アプリケーションサービスとは異なることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記データの第１のセットの前記パラメータは、前記確立された接続に関連付けられた１つまたは複数の状態変数と、前記ソケットを複製する要求と、前記確立された接続において前記クライアントによって送られたデータの初期のセットとさらにを備えることを特徴とする請求項１４に記載の方法。
【請求項１７】
前記接続情報を受け取ると、前記ネットワークコンポーネントは、前記クライアントコンポーネントの識別、前記データの初期のセットにおいて前記クライアントコンポーネントによって送られた情報のタイプおよび前記接続の長さの１つまたは複数に基づいて前記ソケットの制御を受け入れるかどうかを評価するディスパッチロジックを実装することを特徴とする請求項１１に記載の方法。
【請求項１８】
前記ソケットの制御を受け入れることは、前記ネットワークコンポーネントが前記ソケットの制御を得たことのインジケータを前記リスナに送ることを含むことを特徴とする請求項１１に記載の方法。
【請求項１９】
前記クライアントコンポーネントと直接に通信することは、クライアントコンポーネントデータの後続のセットを前記確立された接続についての対応するネットワークプロトコルスタックのトランスポート層から直接に受け取り、それゆえ前記ユーザモードリスナが回避されることを備えることを特徴とする請求項１１に記載の方法。
【請求項２０】
コンピュータ化されたシステムでの使用のためのコンピュータプログラム製品であって、ユーザモードリスナがクライアントコンピュータシステムにおけるプロセスとネットワークコンピュータにおけるプロセスとの間の接続をユーザモードで中継するように構成され、前記コンピュータプログラム製品にはコンピュータ実行可能命令が格納され、前記コンピュータ実行可能命令は、実行されると、前記接続の制御を前記ネットワークプロセスにユーザモードでディスパッチする方法を前記コンピュータ化されたシステムに実行させ、前記方法は、
ネットワークコンポーネントを要求するクライアントコンポーネントとリスナとの間でソケットを介してユーザモードで接続を確立するアクトと、
前記接続に関連付けられた情報に基づいて前記ソケットの複製を要求するアクトであって、データの第１のセットが受け取られるアクトと、
前記データの第１のセットおよび前記関連付けられた接続情報を前記要求されたネットワークコンポーネントに送るアクトと、
前記ソケットの制御を前記ネットワークコンポーネントが受け入れたことのインジケータを受け取り、それゆえ前記リスナはもはや前記接続について前記クライアントコンピュータから接続データを受け入れず、前記ネットワークコンポーネントと前記クライアントコンポーネントは前記リスナなしで前記接続を介して通信するアクトと
を備えたことを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク接続の制御を要求されたプロセスにユーザモードでハンドオフする能力を、ネットワークリスナに提供するためのシステム、方法、およびコンピュータプログラム製品に関する。
【背景技術】
【０００２】
職場環境であれ家庭環境であれ娯楽環境であれ、コンピュータ化されたシステムを実装する人および機関がますます増加するのに伴って、コンピューティングリソースを共有する必要性もまた増大してきた。共有環境の１つのタイプは分散ファイルシステムだが、これは一般に、クライアント／サーバベースの適用例であり、クライアントはネットワークを介して、中央のサーバがあたかもクライアント自身のコンピュータであるかのように、サーバに格納されたデータにアクセスし、処理することができる。例えば、会社の数人の従業員が、リモートに位置するネットワークドライブの特定のファイルに、複数のパーソナルコンピュータから電子的にアクセスすることを許可される場合がある。別の例では、あるロケーションのコンピューティングシステムが、別のロケーションにある別のコンピュータの処理リソースを使用して、特定のジョブを補助することが必要な場合がある。
【０００３】
当然、ネットワークを介して様々なファイルおよびプロセスを共有することによりいくつかの明白な利点がもたらされ得るのと同様に、ネットワーク化の問題および欠点もまたよく知られている。これらの問題は、悪意から出たものではないアーキテクチャ上の問題から、意図的な悪意に及ぶ。悪意から出たものではないアーキテクチャ上の問題の一例は、ネットワークコンピュータが限られた数のポートを有することであり、これにより普通、ネットワークプロセスやモジュールなど、限られた数のネットワークコンポーネントへのアクセスしかクライアントコンポーネントに提供できない。これは、多数のクライアントコンポーネントが同じポートを通じていくつかのネットワークコンポーネントへのアクセスを必要とするときに問題を生じる可能性がある。
【０００４】
他方、悪意あるネットワーク問題に関する周知の例には、コンピュータウイルスおよびネットワーク侵入者が含まれる。ウイルスは典型的には、気付かずに受け取ったある受信者から次の受信者に電子的に渡されるコンピュータ実行可能命令であり、これは実行されると、重要なシステムファイルを改変または消去したり、個人情報を盗んだりする。同様に、ネットワーク侵入者は、通常は閉じているインターネットへの接続を有する作業ネットワークなど、外部接続に開かれたネットワークで問題となることがある。例えば、悪意ある人物が、会社のネットワークサーバへの電子的アクセスを、通常意図されていたものを越えて得る方法を見つけ、ネットワークの内部で見つかった貴重な会社または従業員の文書へのアクセスを得ることがある。
【０００５】
したがって、コンピュータ化されたシステムのためのオペレーティングシステムセキュリティが、ネットワーク上のコンピュータにとってますます重要になっている。現在、コンピュータ化されたシステムがセキュリティを強化するために使用する方法およびプロセスが無数にある。これらは一般に、ユーザモード（制限がより多く、制御がより少ない）レベルの制御での実行や、カーネルモード（制限がより少なく、制御がより多い）レベルの制御での実行など、プロセスまたはコンポーネントが実行される際の許可のタイプに分類することができる。一般に、例えば、クライアントコンポーネントと、ネットワークコンピュータにおいて要求されたネットワークプロセスとが、ユーザモードで情報を通信している場合、クライアントコンポーネントは、ネットワークプロセスへの限られたアクセス（もしあれば）と、ネットワークコンピュータのシステムメモリまたはサービスへの限られたアクセス（もしあれば）しか有しない。
【０００６】
しかし、クライアントコンポーネントが、ネットワークコンピュータ上で実行されているカーネルモードドライバを介してネットワークコンピュータコンポーネントに接続する場合は、クライアントはずっと多くのフレキシビリティを有する。特に、クライアントプロセスは、いくつかの場合には、ネットワークコンピュータにおいてシステムメモリおよび／またはその他のサービス、プロセスもしくはコンポーネントへの無制限のアクセスを有することがある。とりわけ、ネットワーク上でリッスンしているカーネルモードドライバは、誰がそれにメッセージを送ることになるかについて、ほとんどまたはまったく制御を有さない。カーネルモードドライバがメッセージの送信者によって「騙された」場合、メッセージの送信者が与える可能性のあるダメージには、ほとんどまたはまったく制限がない。対照的に、ユーザモードで実行されているプロセスは、オペレーティングシステムセキュリティによって制限することができる。
【０００７】
このように、実行中のコンポーネントのユーザモードおよびカーネルモードのレベルは、それぞれの利点および欠点をいくつか提供することができ、そのため、通常は特定のタイプの状況で実装される。例えば、ネットワークスタック上のＴＣＰプロトコルを介してＨＴＴＰ要求を実装するコンポーネントなどのユーザモードリスナは、共有メモリ空間、名前付きパイプ、リモートプロシージャプロトコル（「ＲＰＣ」）、分散コンポーネントオブジェクトモデル（「ＤＣＯＭ」）など、任意数の通信メカニズムを介して、要求されたネットワークプロセスにクライアントプロセスデータを中継することによって動作する。次いで、要求されたプロセスは、関連する通信メカニズムを介して、中継されたクライアントプロセスデータを取得し、同様に、関連する通信メカニズムを介してのみクライアントプロセスに応答する。このように、クライアントプロセスと要求されたネットワークコンピュータプロセスとが直接的に通信することはない。
【０００８】
とりわけ、ユーザモードで動作しているリスナは、システムメモリに対して限られたアクセスしか有さず、また他のシステムプロセスまたはコンポーネントに対して限られたアクセスしか有さないので、悪意あるクライアントプロセスがネットワークコンピュータに対するダメージを引き起こしたり、機密情報にアクセスしたりすることは、かなり妨げられる。他方、ユーザモードのリスナは、共有メモリや名前付きパイプなどを使用して中間の中継メカニズムとして働くので、外部クライアント接続の数が多い場合またはデータ転送が多い場合は特に、ネットワーク通信速度の大きなボトルネックになる可能性がある。
【０００９】
対照的に、カーネルモードで動作しているネットワークドライバなど、カーネルモードのリスナは、クライアントプロセスからの接続データをシステムメモリに直接的に書き込み、さらには、適切なら、要求されたネットワークプロセスに接続全体の制御をディスパッチすることもできる。いずれの場合も、カーネルモードのリスナにより、ネットワークプロセスが、ユーザモードリスナの場合のように共有メモリ空間や名前付きパイプなどを使用するよりもずっと高速なメカニズムを使用してクライアントプロセスと通信できるようになる。残念ながら、カーネルモードのリスナはネットワークコンピュータシステムおよびメモリへのアクセスが非常に自由なので、悪意ある人物またはプログラムがネットワークコンピュータメモリを侵略し、ネットワークコンピュータ上の機密システムファイルまたはその他のネットワークプロセスへのアクセスを得る可能性があろう。このため、カーネルモードのリスナは通常、それに関連する速度が役立つであろう多くの状況で回避される。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがって、ユーザモードのリスナが、クライアントプロセスと要求されたネットワークプロセスとの間の通信を、それに関連する典型的な速度またはボトルネックの問題を被ることなく容易にするシステム、方法、およびコンピュータプログラム製品により、当技術分野における利点を実現することができる。さらに、ネットワークコンピュータにおけるシステムメモリまたはその他の機密システムプロセスを公開することなく、クライアントプロセスと要求されたネットワークコンピュータとの間の通信を適切なときに容易にするようなシステムにより、利点を実現することができる。
【課題を解決するための手段】
【００１１】
本発明は、ユーザモードのリスナがクライアント接続の制御をネットワークコンピュータコンポーネントに安全な仕方で効果的にディスパッチできるようにするシステム、方法、およびコンピュータプログラム製品により、当技術分野における前述の問題の１つまたは複数を解決する。とりわけ、ユーザモードのリスナは、本発明によれば、ネットワークコンピュータのシステムメモリおよび／またはシステムサービスを公開することなく、要求されたネットワークコンポーネントにクライアント接続の制御をディスパッチすることができる。
【００１２】
例えば、本発明の少なくとも１つの実施形態では、ネットワークコンピュータにおいてユーザモードで動作しているネットワーク接続プロセスなどのリスナが、ネットワークコンポーネントへの通信アクセスについてクライアントコンポーネントから要求を受け取る。適切なら、ユーザモードリスナは次いで、アプリケーションプログラムインターフェース（「ＡＰＩ」）やその他のコンポーネントまたはモジュールなど、第１のアプリケーションサービスに、ソケット複製の要求を渡し、第１のアプリケーションサービスは、ユーザモードのコンテキスト情報を含むデータの第１のセットを返す。次いでユーザモードリスナは、第１のアプリケーションサービスによって送られたデータの第１のセットを、共有メモリや名前付きパイプなど従来の中継メカニズムを使用して、要求されたネットワークコンポーネントに渡す。
【００１３】
適切なら、次いで、要求されたネットワークコンポーネントは、ユーザモードリスナによって制御されるソケットを複製するために第１または第２のアプリケーションサービスなどのアプリケーションサービスをコールし、データの第１のセットをパラメータとして渡す。次いで、コールされたアプリケーションサービスは、指定されたソケットに対する制御のパラメータとデータの第１のセットのパラメータとを有する応答を、ネットワークコンポーネントに提供する。指定されたソケットに対する制御により、要求されたネットワークコンポーネントは、残りのクライアント接続についてこのソケットを介してクライアントコンピュータコンポーネントと直接的に通信することができる。このため、本発明によるユーザモードリスナは、システムメモリやその他の機密システムサービス、コンポーネント、またはプロセスを公開することなく、ネットワークコンピュータコンポーネントにクライアント接続の制御をディスパッチすることができる。これにより、クライアントコンポーネントとネットワークコンピュータコンポーネントは、典型的にはユーザモードに関連付けられるセキュリティと共に、カーネルモードで動作する場合と同様の速度で通信できるようになる。
【００１４】
本発明の例示的な実装形態についての追加の特徴および利点については後続の説明に示されるが、部分的には、この説明から明らかになるであろうし、あるいはこのような例示的な実装形態の実施によって習得することができる。このような実装形態の特徴および利点は、添付の特許請求の範囲で特に示す手段および組合せによって、実現および獲得することができる。これらおよびその他の特徴は、後続の説明および添付の特許請求の範囲からより完全に明らかになるであろうし、あるいは後述するこのような例示的な実装形態の実施によって習得することができる。
【発明を実施するための最良の形態】
【００１５】
本発明の上述およびその他の利点および特徴を得ることのできる方法を述べるために、上に簡単に述べた本発明のより詳細な説明を、添付の図面に示す本発明の特定の実施形態を参照することによって提供することにする。これらの図面は本発明の典型的な実施形態だけを示すものであって、それ故、本発明の範囲を限定するものと考えるべきではないことを理解した上で、添付の図面の使用を通じて本発明をさらに具体的にそして詳細に記述および説明することにする。
【００１６】
本発明は、ユーザモードのリスナがクライアント接続の制御をネットワークコンピュータコンポーネントに安全な仕方で効果的にディスパッチできるようにするシステム、方法、およびコンピュータプログラム製品に及ぶ。とりわけ、ユーザモードのリスナは、本発明によれば、ネットワークコンピュータのシステムメモリおよび／またはシステムサービスを公開することなく、要求されたネットワークコンポーネントにクライアント接続の制御をディスパッチすることができる。
【００１７】
このため、本明細書および特許請求の範囲から理解されるように、本発明の一態様は、クライアントコンポーネント（例えばプロセス、インターフェース、またはモジュールなど）との接続の制御を、要求されたネットワークコンポーネント（例えばプロセス、インターフェース、またはモジュールなど）にディスパッチすることを備える。さらに、本明細書で述べる接続は、クライアントコンピュータシステムにおけるクライアントコンポーネントと、別のネットワークコンピュータシステムにおけるネットワークコンポーネントとの間のものとすることができることが理解されるであろうが、本明細書で述べる本発明の原理は、同じローカルコンピュータにおけるコンポーネント間接続のコンテキストで適用することもできる。つまり、同じコンピュータシステムのクライアントコンポーネントとネットワークコンポーネントが、リスナなどの中間プロセスを通して相互にデータを通信する状況があるということである。
【００１８】
いずれにしても、クライアントコンポーネントが接続を確立すると、ネットワークスタックとインターフェースするユーザモードのリスナは、クライアント接続の制御をネットワークコンポーネントにディスパッチするかどうかを確認するためのディスパッチロジックを実施することができる。必ずしも必要ではないが、本発明の別の態様は、要求されたネットワークコンポーネントが、ユーザモードのリスナからクライアント接続の制御を受け入れるべきかどうかを確認するための同様のカリキュラス（ｃａｌｃｕｌｕｓ）を実施することを含むことができる。ネットワークコンポーネント制御が各状況において適切であるときは、ネットワークコンポーネントは接続の制御を受け入れることができ、ネットワークスタックを介してクライアントコンポーネントと直接的に話すことができる。したがって、クライアントコンポーネントとネットワークコンポーネントは、必ずしもカーネルモードにおいて通信することの１つまたは複数の欠点のリスクを冒すことなく、カーネルモードで通信するのと同様の速度で通信することができる。
【００１９】
例えば、図１Ａに、２つのコンピュータ間で本発明を実施した場合の概略的な全体図を示すが、この場合、ユーザモードリスナ１００が、クライアントコンピュータ１４０からのクライアントコンポーネント１０５と、ネットワークコンピュータ１５０におけるネットワークコンポーネント１１０との間の接続を制御する。一実装形態では、ユーザモードリスナ１００はユーザモードで動作するネットワーク接続プロセスだが、ユーザモードリスナ１００は一般に、ネットワークスタック１１５とインターフェースし、初めにクライアントコンポーネントとネットワークコンポーネントとの間でユーザモードのネットワーク接続を制御する、任意のインターフェース、コンポーネント、またはモジュールとして理解されるであろう。このため、図１Ａは、クライアントコンポーネント１０５がネットワークスタック１１５を介してネットワークコンピュータ１５０との接続を確立したのを示している。さらに、図１Ａは、リスナ１００がソケット１３０を介してクライアントコンポーネント１０５とネットワークコンポーネント１１０との間のこの接続を制御することを示している。
【００２０】
初めに、クライアントコンポーネント１０５とリスナ１００が接続を確立すると、リスナ１００は、クライアントコンポーネント１０５によって送られた初期のデータパケットの１つまたは複数の少なくとも一部を読み取る。一実装形態では、ユーザモードリスナ１００はこのようにして、要求されたネットワークコンポーネント（例えば１１０）などのファクタ、および／または、適切な時または場合には、要求された接続の長さに関する何らかの指示などのファクタを識別する。リスナ１００はまた、クライアントコンポーネント１０５からの初期の１つまたは複数のデータパケットを読み取ったときに「ディスパッチロジック」を実装して、クライアントメッセージプロパティまたはシステムプロパティの１つまたは複数に基づいて、接続の制御をトランスファすることにより効率性利得を生じることができるかどうかを判定することができる。
【００２１】
例えば、クライアントメッセージプロパティは、クライアントコンポーネント１０５によって送られたデータパケットのすべてまたはほとんどが同じ要求ネットワークコンポーネント１１０を対象としているかどうか、あるいは接続セッションの長さまたは送られるメッセージのサイズが制御のディスパッチが適切であるようなものかどうか、などを含むことができる。対照的に、システムプロパティはロードバランシングまたはセキュリティポリシーの問題の考慮を含むことができ、これは要求されたネットワークコンポーネントに接続をディスパッチすることによってよりよく実装できるであろう。したがって、ディスパッチロジックは、いくつかのクライアントファクタまたはその他のシステムファクタを評価して、接続の制御をハンドオフするのがコスト的に効果があることをリスナ１００に示すことができる。
【００２２】
確立されたクライアント接続の制御をトランスファすることがリソースの観点からコスト的に効果があることを、ディスパッチロジックがリスナ１００に示した場合は、リスナ１００は次いで、確立された接続の制御のトランスファを開始することができる。そうするために、リスナ１００は、アプリケーションプログラムインターフェース（「ＡＰＩ」）やその他のコンポーネントまたはモジュールなど、ソケット制御を管理するアプリケーションサービス１２０にファンクションコールを送る。一実装形態では、リスナ１００はまた、ファンクションコールのパラメータとして、クライアントコンポーネント１０５によって要求されたネットワークコンポーネント１１０、ならびにソケット複製の要求を渡す。次いで、アプリケーションサービス１２０は、クライアントコンポーネント１０５とネットワークコンポーネント１１０との間の確立された接続に特有のデータの第１のセット（すなわち「Ｄａｔａ1」）と共に応答する。一実装形態では、このデータの第１のセットは、確立された接続についてのネットワークスタック１１５の１つまたは複数の状態変数、ならびに接続についてのユーザモードコンテキスト情報などのデータ、そして接続確立時にクライアントコンポーネント１０５によって送られた任意のデータを含む。
【００２３】
データの第１のセット（すなわち「Ｄａｔａ1」）を受け取ると、図１Ａでは、リスナ１００は、ユーザモード接続のための通信メカニズムを使用して、データの第１のセットおよびコンテキスト情報を、要求されたネットワークコンポーネント１１０にフォワードする。例えば、既存の接続パスは、共有メモリ空間、名前付きパイプ、ＲＰＣ、ＤＣＯＭなどの使用を伴う場合がある。共有メモリ空間に関して、これは通常、リスナ１００がデータの第１のセットおよびコンテキスト情報を、以前に割り振られた共有メモリ中に配置することを伴う。このような状況では、リスナ１００はまた、ネットワークコンポーネント１１０が抽出するデータの第１のセットが共有メモリにあることを示す別個の信号（図示せず）をネットワークコンポーネント１１０に送ることもできる。
【００２４】
ネットワークコンポーネント１１０がデータの第１のセットおよびコンテキスト情報を受け取ると、ネットワークコンポーネント１１０は、接続の制御を受け入れるステップを開始することができる。一実装形態では、これは、リスナ１００によって使用される「ディスパッチロジック」と同様の追加の評価をネットワークコンポーネント１１０もまた実行することを伴う。例えば、ネットワークコンポーネント１１０は、クライアントコンポーネント１０５が信用されるクライアントであるかどうか、またはクライアントコンポーネント１０５が渡すつもりのデータのタイプがネットワークコンポーネント１１０に直接的に渡すのに適しているかどうかを識別するよう試みることができる。いずれにしても、ネットワークコンポーネント１１０が接続の制御を受け入れると決定した場合、ネットワークコンポーネント１１０はソケット１３０を複製するステップを開始する。そうするために、ネットワークコンポーネント１１０は、データの第１のセットのパラメータ、ならびにリスナ１００によって制御されるソケット１３０を複製する要求と共に、ファンクションコールをアプリケーションサービスに渡す。
【００２５】
図１Ａに示すように、ネットワークコンポーネントは、アプリケーションサービス１２５をコールすることによってソケット１３０の複製を要求し、これは、アプリケーションサービス１２５がアプリケーションサービス１２０とは別個の異なる第２のアプリケーションサービス、コンポーネント、またはモジュールである。しかし、同じアプリケーションサービスを使用することがいくつかの状況では適切な場合があり、ネットワークコンポーネント１１０およびリスナ１００が２つの異なるアプリケーションサービスを使用することが他の状況では適切な場合もあることは理解されるであろう。いずれにしても、図１Ａは、アプリケーションサービス１２５が、ネットワークコンポーネント１１０から渡されたファンクションコールおよび含まれたデータを評価するのを示している。次いで、アプリケーションサービス１２５は、ネットワークコンポーネント１１０がソケット１３０を制御できるようにするデータをネットワークコンポーネント１１０に返す。例えば、アプリケーションサービスは、ソケット１３０の名前またはアドレス、接続がディスパッチされる前にクライアントコンポーネントから受け取ったデータの初期のパケットなど、ならびに、リスナ１００およびネットワークスタック１１５に中継して戻すべきその他の任意のネットワークスタック状態変数を返すことができる。アプリケーションサービス１２５はまた、適宜、ユーザモードコンテキスト情報を返すこともできる。
【００２６】
次いで、ネットワークコンポーネント１１０は、アプリケーションサービス１２５から返されたデータを使用して、ソケット１３０の制御、それ故、確立された接続の制御を得る。少なくとも１つの実施形態では、接続の制御を得るこのステップは、ネットワークコンポーネント１１０およびリスナ１００によって行われる追加のアクトを伴うことができる。例えば、一実施形態では、ネットワークコンポーネント１１０は、ネットワークコンポーネント１１０がソケット１３０の制御を得たことのインジケータをリスナ１００に送る。このインジケータに応答して、リスナ１００は、例えば、ネットワークスタックのトランスポート層１１７に、リスナ１００がこれ以上のクライアントコンポーネント１０５のデータを受け取れないことを示す別のインジケータを送る。いくつかの状況では、リスナ１００はまた、ある信号をネットワークスタック１１５に送ることもでき、これによりネットワークコンポーネント１１０が何らかの方法でソケット１３０の制御を確立するまでしばらく入来クライアントコンポーネント１０５のデータをバッファに入れておくよう関連する層に伝える。
【００２７】
要求されたネットワークコンポーネント１１０が確立されたソケット１３０の制御を受け入れたことをすべての関連コンポーネントが理解すると、ネットワークコンポーネント１１０は確立された接続の制御を受け入れたものと理解されることになる。とりわけ、図１Ｂに、ネットワークコンポーネント１１０がソケット１３０の制御を得た場合の図１Ａの概略図を示す。この図では、もはやリスナ１００はクライアントコンポーネント１０５とネットワークコンポーネント１１０との間の中継媒介として働かず、したがってネットワークコンポーネント１１０とクライアントコンポーネント１０５とは、ネットワークスタック１１５を介して直接的に通信する。
【００２８】
前述のように、この直接通信は通常、ユーザモードでリスナ１００の助けによって共有メモリや名前付きパイプなどを介して通信しなければならない場合よりもずっと高速である。さらに、セキュリティ問題に関係するかもしれない利点など、１つまたは複数の追加の利点を実現することもできる。というのは、ソケット１３０の制御の切替えはクライアントコンポーネント１０５に対してトランスペアレントに行うことができ、したがってクライアントコンポーネント１０５は、リスナ１００から要求ネットワークコンポーネント１１０へのソケットの制御の切替えがあったことを知らないからである。つまり、クライアントコンポーネント１０５は初め、その接続がリスナ１００によって扱われていたことをまったく知らなかったかもしれないということである。クライアントコンポーネント１０５がリスナ１００と話していることを知っていたとしても、本発明の実施形態では、ネットワークコンポーネント１１０がいまやソケット１３０を制御しているという信号をクライアントコンポーネント１０５に送る必要はない。
【００２９】
本発明はまた、本発明の実装形態による１つまたは複数の方法の一部として、機能的な結果を達成するための特定の非機能的なアクトの点から説明することもできる。とりわけ、図２に、相互に通信するフローチャート中の２つの方法を示すが、一方の側はユーザモードリスナ１００の視点から行われるアクトを示し、他方の側は、要求されたネットワークコンポーネント１１０の視点から行われるアクトを示している。図２のアクトを、図１Ａおよび１Ｂに示した概略図に関して以下に述べる。
【００３０】
例えば、図２では、接続の制御をネットワークコンポーネントにユーザモードでリスナ１００側からディスパッチする本発明による方法は、接続を確立するアクト２００を備える。アクト２００は、ユーザモードのソケットを介して、クライアントコンポーネントとリスナとの間でユーザモードの接続を確立することを含む。例えば、同じまたは異なるリモートコンピュータにおけるプロセスなどのクライアントコンポーネント１０５が、リスナ１００との接続を開始し、接続パラメータの一部として、同じまたは異なるリモートネットワークコンピュータにおける別のプロセスなど特定のネットワークコンポーネント１１０を要求する。接続はユーザモードなので、ネットワークスタック１１５とインターフェースするリスナ１００は、図１Ａに示したソケット１３０などのソケットを介して接続を制御することになる。
【００３１】
いくつかの場合では、リスナ１００はまた、接続をディスパッチし始める前または間に、接続データの初めの部分をネットワークコンポーネント１１０に中継することになる。したがって、ネットワークコンポーネント１１０側からの方法は、クライアントコンポーネントからのデータを受け取るアクト２５０を備えることができる。アクト２５０は、ユーザモードリスナ１００を介してクライアントコンポーネント１０５からのデータの初期のセットを受け取ることを含む。例えば、ネットワークコンポーネント１１０は、リスナ１００が確立された接続で何を行うべきかを決定するとき、共有メモリ、名前付きパイプ、ＲＰＣ、ＤＣＯＭなどを介して、１つまたは複数のデータパケットを受け取ることができる。
【００３２】
再びリスナ１００の視点を参照すると、接続をディスパッチする方法は、ソケットの複製を要求するアクト２１０も備える。アクト２１０は、接続に関連付けられた情報に基づいてソケットの複製を要求することを含み、この場合はデータの第１のセットが受け取られる。例えば、クライアントコンポーネント１０５によって開始された接続におけるデータの初期のセットを読み取った後、リスナ１００はディスパッチロジックを実施することができる。本明細書で述べたように、ディスパッチロジックは、ネットワークスタック１１５の状態変数についてのデータ、確立された接続でトランスファされることになるデータの量、接続の長さ、クライアントが信頼されるクライアントかどうかなどのファクタを評価するファンクションを含むことができる。
【００３３】
ディスパッチロジックの分析がネットワークコンポーネント１１０へ制御を渡すことを示唆する場合、リスナ１００は、いくつかの場合では、任意の数の追加ステップを行うことができる。例えば、リスナ１００は、前述のようにアプリケーションサービス１２０にファンクションコールを送ることができる。一実装形態では、ファンクションコールのパラメータは、クライアントによって要求されたネットワークコンポーネント、クライアントコンポーネント１０５によって送られたデータの初期のいくらかの量、ソケット複製の要求、および／またはこれらの任意の組合せを含む。次いで、アプリケーションサービス１２０は、ユーザモードコンテキスト情報をそのパラメータの一部として含むデータの第１のセット（例えば「Ｄａｔａ1」）を返すことができよう。アクト２３０に示すように、リスナ１００は次いで、このような任意の関連データをネットワークコンポーネント１１０に渡す。
【００３４】
したがって、ネットワークコンポーネント１１０の視点からの図２の方法は、リスナから接続情報を受け取るアクト２６０を備える。アクト２６０は、ユーザモードリスナから接続情報を受け取ることを含み、接続情報は、クライアントコンポーネントと確立された接続に関する情報を識別する。例えば、ネットワークコンポーネント１１０はデータの第１のセット（すなわち「Ｄａｔａ1」）を受け取ることができ、このデータは共有メモリや名前付きパイプなどの中継通信メカニズムを介して中継される。いくつかの場合では、このデータの第１のセットはまた、クライアントコンポーネント１０５からまだ受け取っていない確立されたクライアント接続における他のデータ、ならびに、ソケット１３０の制御を受け入れるのが適切かどうかをネットワークコンポーネント１１０が識別するのに使用できる任意のデータを含むこともできる。例えば、リスナ１００は、ソケット１３０の制御をネットワークコンポーネント１１０にハンドオフするのが適切であると決定したが、ネットワークコンポーネント１１０は、それ自体の同様のディスパッチロジックを実装して、ネットワークコンポーネント１１０が接続の制御を扱うのに適していないと決定する場合がある。例えば、ネットワークコンポーネント１１０は、クライアントコンポーネント１０５が信頼されないと判定することがある。あるいは、ネットワークコンポーネント１１０は単純に、すべてのディスパッチされた接続をリスナ１００から受け入れるように構成されてもよい。
【００３５】
とは言うものの、ネットワークコンポーネント１１０がソケット１３０の制御を受け入れることができると判定した場合、図２は、ネットワークコンポーネント１１０がソケットの複製を要求するアクト２７０を行うのを示している。アクト２７０は、接続に関連付けられたソケットの複製を要求することを含む。例えば、ネットワークコンポーネント１１０は、前と同じアプリケーションサービス１２０であれ、アプリケーションサービス１２５などの異なるアプリケーションサービスであれ、アプリケーションサービスにファンクションコールを渡す。ファンクションコールのパラメータは、前にリスナ１００に渡されたデータの第１のセット（例えば「Ｄａｔａ1」）を含む。次いで、アプリケーションサービス１２５などの関連アプリケーションサービスは、ファンクションコールを処理し、ソケット情報をネットワークコンポーネント１１０に返す。ソケット情報は、確立された接続に関連付けられたネットワークスタック１１５の１つまたは複数の状態変数を含んでいてもよい。いずれにしても、返された情報により、ネットワークコンポーネント１１０はソケット１３０の制御を取ることができる。
【００３６】
したがって、ネットワークコンポーネントの視点からの方法は、ソケットの制御を受け入れるアクト２８０も含む。アクト２８０は、リスナからソケットの制御を受け入れることを含み、ネットワークコンポーネントは、ユーザモードでの接続を介してクライアントコンポーネントと直接的に通信する。例えば、一実装形態では、ネットワークコンポーネント１１０は、ネットワークコンポーネント１１０がソケットの制御を受け入れたことを示す信号をリスナ１００に送る（例えば図１Ｂ）。しかし、他の実装形態では、ネットワークコンポーネント１１０は、ネットワークスタック１１５と直接的に通信し、リスナ１００を介して情報を送るのを停止するようネットワークスタック１１５に伝えることができる。
【００３７】
とは言うものの、リスナ１００の視点からの図２の方法では、制御をディスパッチするための方法は、ネットワークコンポーネントが制御を受け入れたことのインジケータを受け取るアクト２４０を備えることができることが示されている。アクト２４０は、ネットワークコンポーネントがソケットの制御を受け入れたことのインジケータを受け取ることを含み、したがって、リスナはもはや接続のためにクライアントコンピュータから接続データを受け入れず、ネットワークコンポーネントとクライアントコンポーネントは、リスナなしの接続を介して通信する。例えば、リスナはユーザモードでソケット１３０の制御を渡したので、ネットワークコンポーネント１１０もまたユーザモードで効果的にクライアントコンポーネント１０５に接続される。つまり、クライアントコンポーネント１０５とネットワークコンポーネント１１０は、メモリ使用またはその他の制限された許可の点で制限される、それゆえネットワークコンピュータの活用を回避するモードであっても、ネットワークプロトコルスタック１１５を介して直接的に接続される。
【００３８】
したがって、本発明の実装形態は、当技術分野におけるいくつかの利点を提供する。とりわけ、異なるコンピュータ間または同じコンピュータの、ネットワークコンポーネントとクライアントコンポーネントとの間で、必要であればもっと速い速度で、さらにはカーネルモード接続速度に近いかそれよりも速い速度で、比較的安全な、またはより制限された接続を行うことができる。さらに、本発明の実装形態により、リスナは、主として接続がシステムに対するボトルネックを引き起こす可能性があるときに、これらの接続をネットワークコンポーネントに渡すことができる。このように、リスナは依然として、接続をディスパッチしても顕著な利得を得られそうにないユーザモードでの多量の接続を扱い続けることができ、ずっと効率的な仕方でディスパッチを行うことができる。
【００３９】
図３および以下の考察は、本発明を実施することのできる適切なコンピューティング環境についての簡単で一般的な説明を提供するものである。必須ではないが、本発明は、プログラムモジュールなど、ネットワーク環境のコンピュータによって実行されるコンピュータ実行可能命令の一般的なコンテキストで述べる。一般に、プログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連するデータ構造、プログラムモジュールは、本明細書で開示した方法のステップを実行するためのプログラムコード手段の例を表す。このような実行可能命令または関連するデータ構造の特定のシーケンスは、このようなステップで述べたファンクションを実装するための対応するアクトの例を表す。
【００４０】
当業者は、本発明がパーソナルコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含む多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境で実施することができることを理解するであろう。本発明は、ローカルおよびリモートの処理デバイスがタスクを実行し、通信ネットワークを介して（ハードワイヤードリンク、ワイヤレスリンク、またはハードワイヤードリンクとワイヤレスリンクの組合せによって）リンクされる分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶デバイスに位置することができる。
【００４１】
図３を参照すると、本発明を実施するための例示的なシステムは、処理ユニット３２１、システムメモリ３２２、およびシステムメモリ３２２を含む様々なシステムコンポーネントを処理ユニット３２１に結合するシステムバス３２３を含む従来型のコンピュータ３２０の形態の汎用コンピューティングデバイスを含む。システムバス３２３は、様々なバスアーキテクチャのいずれかを使用した、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスを含むいくつかのタイプのバス構造のいずれかとすることができる。システムメモリは、読取り専用メモリ（ＲＯＭ）３２４およびランダムアクセスメモリ（ＲＡＭ）３２５を含む。ＲＯＭ３２４には、起動中などにコンピュータ３２０内の要素間で情報を転送するのを助ける基本ルーチンが入ったＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）３２６を格納することができる。
【００４２】
コンピュータ３２０はまた、磁気ハードディスク３３９に対して読み書きするための磁気ハードディスクドライブ３２７と、リムーバブルな磁気ディスク３２９に対して読み書きするための磁気ディスクドライブ３２８と、ＣＤ  ＲＯＭやその他の光媒体などリムーバブルな光ディスク３３１に対して読み書きするための光ディスクドライブ３３０を含むこともできる。磁気ハードディスクドライブ３２７、磁気ディスクドライブ３２８、光ディスクドライブ３３０は、それぞれハードディスクドライブインターフェース３３２、磁気ディスクドライブインターフェース３３３、光ドライブインターフェース３３４によってシステムバス３２３に接続される。ドライブおよびそれらに関連するコンピュータ可読媒体は、コンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性ストレージをコンピュータ３２０に提供する。本明細書で述べる例示的な環境は、磁気ハードディスク３３９、リムーバブルな磁気ディスク３２９、リムーバブルな光ディスク３３１を利用しているが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなどを含め、他のタイプのデータ記憶用コンピュータ可読媒体を使用することもできる。
【００４３】
ハードディスク３３９、磁気ディスク３２９、光ディスク３３１、ＲＯＭ３２４、またはＲＡＭ３２５には、１つまたは複数のプログラムモジュールを含むプログラムコード手段を格納することができ、これらにはオペレーティングシステム３３５、１つまたは複数のアプリケーションプログラム３３６、その他のプログラムモジュール３３７、プログラムデータ３３８が含まれる。ユーザは、キーボード３４０やポインティングデバイス３４２を介して、またはマイクロフォン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナなど他の入力デバイス（図示せず）を介して、コンピュータ３２０にコマンドおよび情報を入力することができる。これらおよび他の入力デバイスは、システムバス３２３に結合されたシリアルポートインターフェース３４６を介して処理ユニット３２１に接続されることが多い。あるいは入力デバイスは、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）など、その他のインターフェースによって接続されてもよい。モニタ３４７または別の表示デバイスも、ビデオアダプタ３４８などのインターフェースを介してシステムバス３２３に接続される。モニタに加えて、パーソナルコンピュータは通常、スピーカやプリンタなど、その他の周辺出力デバイス（図示せず）も含む。
【００４４】
コンピュータ３２０は、リモートコンピュータ３４９ａおよび３４９ｂなど、１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することもできる。リモートコンピュータ３４９ａおよび３４９ｂはそれぞれ、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の共通のネットワークノードであってよく、通常はコンピュータ３２０に関して上述した要素の多くまたはすべてを含むが、図３では、メモリ記憶デバイス３５０ａおよび３５０ｂとそれらに関連するアプリケーションプログラム３３６ａおよび３３６ｂだけが示してある。図３に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）３５１およびワイドエリアネットワーク（ＷＡＮ）３５２を含むが、これらは、限定ではなく例としてここに提示するものである。このようなネットワーキング環境は、オフィス全体または企業全体のコンピュータネットワーク、イントラネット、およびインターネットでよくみられる。
【００４５】
ＬＡＮネットワーキング環境で使用されるときは、コンピュータ３２０は、ネットワークインターフェースまたはアダプタ３５３を介してローカルネットワーク３５１に接続される。ＷＡＮネットワーキング環境で使用されるときは、コンピュータ３２０は、インターネットなどのワイドエリアネットワーク３５２を介した通信を確立するためのモデム３５４、ワイヤレスリンク、またはその他の手段を含むことができる。モデム３５４は内蔵でも外付けでもよく、シリアルポートインターフェース３４６を介してシステムバス３２３に接続される。ネットワーク化された環境では、コンピュータ３２０に関して示したプログラムモジュールまたはその一部を、リモートのメモリ記憶デバイスに格納することができる。図示したネットワーク接続は例示であり、ワイドエリアネットワーク３５２を介した接続を確立するための他の手段を使用してもよいことが理解されるであろう。
【００４６】
本発明は、その趣旨または本質的な特性を逸脱することなく、他の具体的な形態で実施することもできる。記載の実施形態は、すべての点において、限定ではなく単に例示と見なされるべきである。それ故、本発明の範囲は、前述の説明ではなく添付の特許請求の範囲によって示される。特許請求の範囲の均等の意味および範囲に入るすべての変更は、特許請求の範囲内に包含されるべきである。
【図面の簡単な説明】
【００４７】
【図１Ａ】本発明の一実装形態による、ユーザモードで動作しているリスナがクライアントコンポーネントとネットワークコンポーネントとの間の接続をハンドオフし始めた場合の概略的な全体図である。
【図１Ｂ】ネットワークコンポーネントが接続の制御を有する場合の、図１Ａの概略的な全体図である。
【図２】本発明の一実装形態による、リスナによって接続を渡すためのアクト、およびネットワークコンポーネントによってリスナから接続の制御を受け取るためのアクトのフローチャートである。
【図３】本発明によるシステムおよび方法を実装するための適切なコンピューティング環境の概略図である。
【符号の説明】
【００４８】
１００  リスナ（ディスパッチロジック）
１０５  クライアントコンポーネント
１１０  ネットワークコンポーネント
１１５  ネットワークスタック
１１７  トランスポート
１２０  アプリケーションプログラミングインターフェース
１２５  アプリケーションプログラミングインターフェース
１３０  ソケット
１４０  クライアントコンピュータ
１５０  ネットワークコンピュータ
３２０  コンピュータ
３２１  処理ユニット
３２２  システムメモリ
３２３  システムバス
３２４  ＲＯＭ
３２５  ＲＡＭ
３２７  磁気ハードディスクドライブ
３２８  磁気ディスクドライブ
３２９  磁気ディスク
３３０  光ディスクドライブ
３２６  ＢＩＯＳ
３３２  ハードディスクドライブインターフェース
３３３  磁気ディスクドライブインターフェース
３３４  光ドライブインターフェース
３３５  オペレーティングシステム
３３６，３３６ａ，３３６ｂ  アプリケーションプログラム
３３７  その他のプログラムモジュール
３３８  プログラムデータ
３３９  磁気ハードディスク
３４０  キーボード
３４２  ポインティングデバイス
３４６  シリアルポートインターフェース
３４７  モニタ
３４８  ビデオアダプタ
３４９ａ，３４９ｂ  リモートコンピュータ
３５０ａ，３５０ｂ  メモリ記憶デバイス
３５１  ローカルエリアネットワーク
３５２  ワイドエリアネットワーク
３５３  ネットワークインターフェース
３５４  モデム
【図１Ａ】
2006216018.tif 000003
【図１Ｂ】
2006216018.tif 000004
【図２】
2006216018.tif 000005
【図３】
2006216018.tif 000006