"複数のノードを含むネットワークにおいてアプリケーションプログラムが通信を行って、ピアツーピアグラフを管理するための、前記複数のノードのうちのいずれかのノードにより処理される方法であって、前記アプリケーションプログラムから、取り出されるノードのグラフハンドル、情報が望まれるノードのノード識別、および前記ノードについての情報を含むピアノード情報データ構造へのポインタを含む複数の呼出しパラメータを有するノード情報取得呼出し、設定されるノードのグラフハンドル、および前記ノードに関連付ける属性を表すストリングを含む複数の呼出しパラメータを有するノード属性設定呼出し、取り出されるグラフプロパティのグラフハンドル、およびグラフプロパティへのポインタを含む複数の呼出しパラメータを有するグラフプロパティ取得呼出し、グループハンドル、前記グループハンドルに対応する現在前記グループの状況として設定されている1組のピアグラフ状況フラグを含む複数の呼出しパラメータを有するグラフ状況取得呼出し、設定されるグラフプロパティのグラフハンドル、およびグラフプロパティデータ構造へのポインタを含む複数の呼出しパラメータを有するグラフプロパティ設定呼出し、および時間変換のグラフハンドル、変換されるグラフ時間へのポインタ、およびグラフ時間から導出されたローカルシステム時間へのポインタを含む複数の呼出しパラメータを有するグラフ時間からのシステム変換呼出し、からなるグループから選択された複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップと、前記グラフ管理呼出しを構文解析し、前記複数の呼出しパラメータを取り出すステップと、前記グラフ管理呼出しの成功/失敗を示す値を前記アプリケーションプログラムに返すステップとを備え、前記複数のノードの各ノードは、ネットワーク内の他のノードへの参照のリストを含むルーティングテーブルを蓄積し、該ノードについて、ノード識別、アドレス、ノードのキー、該ノードのキーとローカルノードのキーとの間の距離を含むアドレス情報を獲得し、前記グラフ内の前記複数のノードすべてに送信されるデータ群であるレコードが前記ノードによって受信された後で、前記ノードは該レコードをデータベースまたはデータ記憶内に配置することを特徴とする方法。前記アプリケーションプログラムから、複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップは、グラフのプロパティ群、作成時に前記グラフに関連付けるデータベースの名前、前記グラフ用のセキュリティプロバイダについての情報、および前記グラフへのハンドルを含む複数の呼出しパラメータを有するグラフ作成呼出しを、前記アプリケーションプログラムから受信するステップを含むことを特徴とする請求項1に記載の方法。前記アプリケーションプログラムから、複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップは、開かれるグラフの識別子である第1の一意の識別子、前記グラフを開く人の識別子である第2の一意の識別子、前記グラフ用のセキュリティプロバイダについての情報、配列内のレコードタイプ数、レコードが同期される順序を示すレコードタイプの配列、および前記グラフへのハンドルを含む複数の呼出しパラメータを有するグラフオープン呼出しを、前記アプリケーションプログラムから受信するステップを含むことを特徴とする請求項1に記載の方法。前記アプリケーションプログラムから、複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップは、聴取するグラフへのハンドル、聴取するIPv6スコープ、聴取するIPv6スコープ識別子、および聴取するポートを含む複数の呼出しパラメータを有するグラフ聴取呼出しを、前記アプリケーションプログラムから受信するステップを含むことを特徴とする請求項1に記載の方法。前記アプリケーションプログラムから、複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップは、接続されるグラフのハンドル、1つのIPアドレスで接続される人の一意の識別、前記人についての情報を含むデータ構造へのポインタ、および接続識別へのポインタを含む複数の呼出しパラメータを有するグラフ接続呼出しを、前記アプリケーションプログラムから受信するステップを含むことを特徴とする請求項1に記載の方法。前記アプリケーションプログラムから、複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップは、切断するグラフへのハンドルを含む複数の呼出しパラメータを有するグラフクローズ呼出しを、前記アプリケーションプログラムから受信するステップを含むことを特徴とする請求項1に記載の方法。前記アプリケーションプログラムから、複数の呼出しパラメータを有するグラフ管理呼出しを受信するステップは、データを削除するグラフの名前、データを削除するピア識別、および削除するグラフに関連付けられたデータベースの名前を含む複数の呼出しパラメータを有するグラフ削除呼出しを、前記アプリケーションプログラムから受信するステップを含むことを特徴とする請求項1に記載の方法。アプリケーションプログラムとサーバプロセスの間で通信を行って、ピアツーピアグラフを管理する方法であって、前記アプリケーションプログラムから、取り出されるノードのグラフハンドル、情報が望まれるノードのノード識別、および前記ノードについての情報を含むピアノード情報データ構造へのポインタを含む複数の呼出しパラメータを有するノード情報取得呼出し、設定されるノードのグラフハンドル、および前記ノードに関連付ける属性を表すストリングを含む複数の呼出しパラメータを有するノード属性設定呼出し、取り出されるグラフプロパティのグラフハンドル、およびグラフプロパティへのポインタを含む複数の呼出しパラメータを有するグラフプロパティ取得呼出し、グループハンドル、前記グループハンドルに対応する現在前記グループの状況として設定されている1組のピアグラフ状況フラグを含む複数の呼出しパラメータを有するグラフ状況取得呼出し、設定されるグラフプロパティのグラフハンドル、およびグラフプロパティデータ構造へのポインタを含む複数の呼出しパラメータを有するグラフプロパティ設定呼出し、および時間変換のグラフハンドル、変換されるグラフ時間へのポインタ、およびグラフ時間から導出されたローカルシステム時間へのポインタを含む複数の呼出しパラメータを有するグラフ時間からのシステム変換呼出し、からなるグループから選択された複数の呼出しパラメータを有するグラフおよびノード情報管理呼出しを受信するステップと、前記グラフおよびノード情報管理呼出しを構文解析し、前記複数の呼出しパラメータを取り出すステップと、前記グラフおよびノード情報管理呼出しの成功/失敗を示す値を前記アプリケーションプログラムに返すステップとを備えたことを特徴とする方法。複数のノードを含むネットワークにおいてアプリケーションプログラムが通信を行って、ピアツーピアグラフを管理するための、前記複数のノードのうちのいずれかのノードにより処理される方法であって、前記アプリケーションプログラムから、レコード追加のグラフハンドル、レコードデータへのポインタ、およびグラフ内のレコードを一意に識別するレコード識別へのポインタを含む複数の呼出しパラメータを有するレコード追加呼出し、レコード更新のグラフハンドル、および更新されるレコードに関連付ける新しいデータへのポインタを含む複数の呼出しパラメータを有するレコード更新呼出し、レコード削除のグラフハンドル、削除するレコードのレコード識別へのポインタ、および前記レコードがローカルデータベース内にあるかどうかの表示を含む複数の呼出しパラメータを有するレコード削除呼出し、レコード取出しのグラフハンドル、取り出すレコードのレコード識別へのポインタ、および前記取り出されたレコードへのポインタを含む複数の呼出しパラメータを有するレコード取得呼出し、レコード列挙のグラフハンドル、反復を行うレコードのタイプへのポインタ、レコードを反復すべきピア識別へのポインタ、および反復へのハンドルを含む複数の呼出しパラメータを有するレコード列挙呼出し、レコード探索のグラフハンドル、クエリが記述されたXMLストリング、および列挙ハンドルを含む複数の呼出しパラメータを有するレコード探索呼出し、および妥当性検査期間延長レコードのグラフハンドル、再び妥当性検査をすべきレコード識別の配列内のレコード数、および再び妥当性検査をすべきレコード識別の前記配列を含む複数の呼出しパラメータを有する期間延長レコード妥当性検査呼出し、からなるグループから選択された複数の呼出しパラメータを有するレコード管理呼出しを受信するステップと、前記レコード管理呼出しを構文解析し、前記複数の呼出パラメータを取り出すステップと、前記レコード管理呼出しの成功/失敗を示す値を前記アプリケーションプログラムに返すステップとを備えたことを特徴とする方法。サーバ中心の環境の場合と同様に、ピアツーピアのグラフは、グラフ内でインターネットファイルの探索および共有を可能にするために完全に開放することができる。しかし、ピアツーピアネットワークは、分散されたユーザまたはピアのグラフとして形成されるため、ネットワーク内のピアすべてが共有情報を知ることができるようになる前に、通信またはデータレコードをあるピアから別のピアに渡すことが必要である。そのような経路設定を提供するシステムとしては、UsenetおよびOSPFがある。しかし、そのような現行のシステムには、現在までのところ限界があり、ピアツーピア技術の発展と完成を制限している。さらに、ピアツーピアネットワークは、現在、適切なグラフ管理を欠いており、メンバの1つがグループを離れても、断続的にグラフを分断または分割することができない。そのような場合には、もはやグラフの一方からの情報を、1つピアの離脱によって生み出されたのと反対の側のピアメンバに渡すことができない。他の欠点は、そのような分離を検出するための適切な機構が存在しないことである。したがって、当技術分野では、当技術分野に存在する上述の、および他の問題に対処するピアツーピアのグラフおよびレコードを管理するインターフェースが求められている。本願に開示されている本発明の概念は、ピアツーピアP2Pネットワーク内でのグラフ管理のための新規な、また改善されたシステムおよび方法を含む。より具体的には、本発明は、グラフの作成およびアクセス、ノードおよびグラフ情報の取出し、レコードデータの追加、修正、削除、管理、グラフデータのインポートおよびエクスポート、グラフのノード間の直接通信、グラフへのセキュリティプロバイダの追加、存在情報の設定および取出し、イベント通知への登録、および他のユーティリティ/サポート機能のための新規な、または改善されたP2PアプリケーションプログラミングインターフェースAPIおよび方法を目的とする。本発明の一実施形態においては、ピアツーピアグラフを確立するために、またはピア間でデータを効率的かつ確実に渡すために、APIおよび方法がアプリケーション作成者に公開される。グラフ処理の基本構造は、各ノードが、グラフ内のデータの一貫したビューを確実に持つようにする。グラフ処理技術の中核部分corepieceは、グラフノードである。ノードは、ネットワーク上の個人の特定のインスタンスを示す。ノードは互いに接続することができ、ノードのネットワークまたはグラフを形成する。ノードは、レコードの形態で相互にデータを送信することができる。レコードは、本質的に、グラフ内のノードすべてに押し流される送信されるデータ群である。レコードがノードによって受信された後で、ノードは、そのレコードをデータベースまたはデータ記憶内に配置する。グラフ処理は、各ノードのデータベースがまったく同じデータのビューを確実に有するようにする責任を負う。グラフ処理は、各ノードを同期させておく。ノードが接続し、またグラフから切断されたとき、グラフ内で分離または分割が発生する可能性がある。グラフ処理はまた、これらの分離を検出し修復する責任を負う。グラフ内のノードは、望まれれば、従来のグラフ接続とは別個の接続を作成することができる。これらの直接接続は、ノードが任意のデータを互いに送信することを可能にする。最後に、グラフ処理は、アプリケーションがイベント通知を登録し、また受信することを可能にするイベンティングインフラストラクチャを有する。イベント通知は、グラフ処理が使用し、グラフ内で変化が発生した場合アプリケーションに警告する機構である。本発明の一実施形態においては、グラフ作成/アクセス管理を提供するアプリケーションプログラミングインターフェースAPIが提供される。APIは、新しいグラフを作成し、接続のために既存のグラフを開き、接続のためにアクセスされる特定のポートを開き、指定されたIPアドレスでアクセスされるポートへの接続を開始し、開発者がグラフ用のセキュリティプロバイダを指定することを可能にし、セキュリティのないレコードをグラフに追加し、グラフ内のセキュリティのないレコードを更新し、セキュリティのないレコードをグラフから削除する。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。これらのインターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、これらのインターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、グラフ/ノード情報を取り出し、管理するアプリケーションプログラミングインターフェースAPIが提供される。これらのAPIは、ノード情報を取得し、ノード属性を設定し、グラフプロパティを取得し、グラフ状況を取得し、グラフプロパティを設定し、現在のグラフ時間をローカルシステム時間に変換する。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、レコード管理を実現するアプリケーションプログラミングインターフェースAPIが提供される。これらのAPIは、レコードを追加し、レコードを更新し、レコードを削除し、レコードを取り出し、レコードを列挙enumerateし、レコードを探索し、期間を延長したレコードの妥当性検査を行う。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、ノードがそのデータベースをエクスポートし、別のノードからデータベースをインポートすることを可能にするアプリケーションプログラミングインターフェースAPIが提供される。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、ノードがグラフ内のノードすべてを列挙することを可能にし、ノードがその存在をグラフ内に設定することを可能にするアプリケーションプログラミングインターフェースAPIが提供される。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、ユーティリティ/サポート関数を提供するアプリケーションプログラミングインターフェースAPIが提供される。これらのAPIは、一覧内の次の項目を取り出し、列挙を終了し、項目数を取得し、他のAPIによって取り出されたデータを解放する。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、ピア間の直接通信を可能にするアプリケーションプログラミングインターフェースAPIが提供される。これらのAPIは、直接通信を開き、直接通信を閉じ、データを送信し、ノードに接続を列挙する。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本発明の他の実施形態においては、イベントインフラストラクチャを提供するアプリケーションプログラミングインターフェースAPIが提供される。これらのAPIは、イベント通知に登録し、イベントを登録抹消し、イベントデータを取り出す。これらのインターフェースの各々は、これらのインターフェースを使用してグラフを管理し利用するアプリケーションプログラムから渡されるさまざまなパラメータを利用する。インターフェースは、関数の成功または失敗を示す値を返す。失敗の場合、インターフェースは、失敗の原因となった問題に関する表示を提供する。本明細書に組み込まれ、本明細書の一部を形成する添付の図面は、本発明のいくつかの態様を示し、説明と共に本発明の原理を説明するのに有効である。本発明について、いくつかの好ましい実施形態と共に述べることになるが、本発明をこれらの実施形態に限定する意図はない。反対に、添付の特許請求の範囲によって定義される本発明の精神および範囲内に含まれる代替の実施形態、変更される実施形態、および等価な形態のすべてを包含するものとする。同じ参照番号は同じ要素を指す図面を参照して、好適なコンピューティング環境内で実施されるように本発明を示す。必ずしも必要ではないが、本発明については、パーソナルコンピュータによって実行されるプログラムモジュールなど、コンピュータ実行可能命令の一般的な文脈で説明を行う。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。さらに、当業者なら、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサをベースとする家電またはプログラム可能な家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に本発明を実施することができることを理解するであろう。本発明はまた、通信ネットワークを介してリンクされた遠隔処理デバイスによってタスクが実行される分散コンピューティング環境内で実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルと遠隔双方のメモリ記憶デバイス内に配置することができる。図1は、本発明を実施することができる好適なコンピューティングシステム環境100の一例を示す。コンピューティングシステム環境100は、好適なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲についてどんな制限も暗示しないものとする。コンピューティング環境100は、例示的な動作環境100に示されている構成要素のいずれか1つまたは組合せに関してどんな依存性も要件も有すると解釈すべきでない。本発明は、多数の他の汎用または専用コンピューティングシステム環境または構成と共に動作可能である。本発明と共に使用するのに適している可能性のある周知のコンピューティングシステム、環境、および/または構成の例には、それだけには限らないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサをベースとするシステム、セットトップボックス、プログラム可能な家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。本発明について、コンピュータによって実行される、プログラムモジュールなどコンピュータ実行可能命令の全体的な状況で述べることができる。一般に、プログラムモジュールは、特定のタスクを実行する、あるいは特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明はまた、通信ネットワークを介してリンクされた遠隔処理デバイスによってタスクが実行される分散コンピューティング環境内で実施することができる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶デバイスを含むローカルと遠隔双方のコンピュータ記憶媒体内に位置する可能性がある。図1を参照すると、本発明を実施するための例示的なシステムが、コンピュータ110の形態で汎用コンピューティングデバイスを含む。コンピュータ110の構成要素には、それだけには限らないが、処理装置120、システムメモリ130、およびシステムメモリを含むさまざまなシステム構成要素を処理装置120に結合するシステムバス121が含まれる。システムバス121は、メモリバスまたはメモリコントローラ、周辺機器バス、およびさまざまなバスアーキテクチャのいずれかを使用するローカルバスを含むいくつかのタイプのバス構造のいずれかとすることができる。限定ではなく例を挙げると、そのようなアーキテクチャには、ISAIndustryStandardArchitectureバス、MCAMicroChannelArchitectureバス、EISAEnhancedISAバス、VESAVideoElectronicsStandardsAssociateローカルバス、およびメザニンバスとしても知られるPCIPeripheralComponentInterconnectバスが含まれる。コンピュータ110は、一般に、さまざまなコンピュータ読取可能な媒体を含む。コンピュータ読取可能な媒体は、コンピュータ110によってアクセスすることができる任意の入手可能な媒体とすることができ、揮発性媒体と不揮発性媒体、取外し可能なおよび固定の媒体を共に含む。限定ではなく例を挙げると、コンピュータ読取可能な媒体は、コンピュータ記憶媒体と通信媒体を含む。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性と不揮発性、取外し可能なおよび固定の媒体が共に含まれる。コンピュータ記憶媒体には、それだけには限らないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスクDVDもしくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または所望の情報を記憶するために使用することができ、コンピュータ110によってアクセスすることができる他の任意の媒体が含まれる。通信媒体は、一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波または他の移送機構など変調データ信号に統合し、任意の情報送達媒体を含む。変調データ信号という用語は、情報を信号に符号化するようにその特性の1つまたは複数が設定された、または変化した信号を意味する。限定ではなく例を挙げると、通信媒体は、有線ネットワークまたは直接配線接続など有線媒体と、音響、RF、赤外線および他の無線媒体など無線媒体とを含む。上記のいずれかの組合せもまた、コンピュータ読取可能な媒体の範囲内に含まれるべきである。システムメモリ130は、読出し専用メモリROM131およびランダムアクセスメモリRAM132など揮発性および/または不揮発性メモリの形態でコンピュータ記憶媒体を含む。起動中などにコンピュータ110内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システムBIOS133は、一般にROM131内に記憶されている。一般にRAM132は、処理装置120によって直ちにアクセス可能な、かつ/または現在動作されているデータおよび/またはプログラムモジュールを含む。限定ではなく例を挙げると、図1は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、プログラムデータ137を示す。コンピュータ110はまた、他の取外し可能な/固定の、揮発性/不揮発性コンピュータ記憶媒体を含むことができる。例にすぎないが、図1は、固定の不揮発性磁気媒体との間で読出しまたは書込みをするハードディスクドライブ140、取外し可能な不揮発性磁気ディスク152との間で読出しまたは書込みをする磁気ディスクドライブ151、CDROMまたは他の光媒体など取外し可能な不揮発性光ディスク156との間で読出しまたは書込みをする光ディスクドライブ155を示す。例示的な動作環境内で使用することができる他の取外し可能な/固定の、揮発性/不揮発性コンピュータ記憶媒体には、それだけには限らないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体RAM、固体ROMなどが含まれる。一般にハードディスクドライブ141は、インターフェース140など固定のメモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、一般に、インターフェース150など取外し可能なメモリインターフェースによってシステムバス121に接続されている。上記で論じ、図1に示されたドライブとその関連コンピュータ記憶媒体は、コンピュータ110のためのコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータを記憶する。たとえば、図1では、ハードディスクドライブ141が、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、プログラムデータ147を記憶して示されている。これらの構成要素は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、プログラムデータ137と同じであることも異なっていることもできることに留意されたい。ここでは、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、プログラムデータ147は、最低でも異なるコピーであることを示すために異なる番号が与えられている。ユーザは、キーボード162、および一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス161など、入力デバイスを介してコンピュータ110にコマンドおよび情報を入力することができる。他の入力デバイス図示せずは、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどを含むことができる。これらの、また他の入力デバイスは、システムバスに結合されるユーザ入力インターフェース160を介して処理装置120に接続されることがしばしばであるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバスUSBなど、他のインターフェースおよびバス構造によって接続することができる。モニタ191または他のタイプのディスプレイデバイスもまた、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータはまた、スピーカ197やプリンタ196など他の周辺出力デバイスを含むことができ、これらは、出力周辺機器インターフェース195を介して接続することができる。コンピュータ110は、リモートコンピュータ180など、1つまたは複数のリモートコンピュータに対する論理接続を使用してネットワーク環境内で動作することができる。リモートコンピュータ180は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたは他の共通ネットワークノードとすることができ、図1には、メモリ記憶デバイス181だけ示されているが、一般に、パーソナルコンピュータ110に関して上述した要素の多数または全部を含む。図1に表された論理接続は、ローカルエリアネットワークLAN171と広域ネットワークWAN173を含むが、他のネットワークを含むこともできる。そのようなネットワーク環境は、事務所、全社コンピュータネットワーク、イントラネット、インターネットで普通である。パーソナルコンピュータ110は、LANネットワーク環境内で使用されるとき、ネットワークインターフェースまたはアダプタ170を介してLAN171に接続される。コンピュータ110は、WANネットワーク環境内で使用されるとき一般に、インターネットなどWAN173を介して通信を確立するためのモデム172または他の手段を含む。モデム172は、内部にあっても外部にあってもよく、ユーザ入力インターフェース160または他の適切な機構を介してシステムバス121に接続することができる。ネットワーク環境では、パーソナルコンピュータ110に関して図示されたプログラムモジュール、またはその一部分を、遠隔メモリ記憶デバイス内に記憶することができる。限定ではなく例を挙げると、図1は、メモリデバイス181に常駐する遠隔アプリケーションプログラム185を示す。図のネットワーク接続は例であり、コンピュータ間で通信リンクを確立する他の手段を使用することができることは理解されよう。以下の説明では、別段の表示がない限り、本発明について、1つまたは複数のコンピュータによって実行される動き、および動作を記号で表したものを参照して述べる。したがって、そのような動きおよび動作は、コンピュータによって実行されると呼ばれることがあり、コンピュータの処理装置によって、構造化された形態でデータを表す電気信号が操作されることを含むことを理解されたい。この操作は、データを変換し、またはコンピュータのメモリシステム内のロケーションでデータを維持し、当業者にはよく理解できる方法で、コンピュータの動作を再構成し、または他の方法で変更する。データが維持されるデータ構造は、データの形式によって定義された特定の特性を有するメモリの物理ロケーションである。しかし、本発明について前述の文脈で述べると、当業者なら、以下で述べるさまざまな動きおよび動作をハードウェアで実施することもできることが理解され、限定をする意味ではないのである。上記で紹介したように、ピアツーピアP2Pプロトコルが成功するか否かは、選択されたエンティティ間で有効な通信を確立するプロトコルの能力に左右される。同様に、そのようなP2Pネットワーク内でのグループの形成は本能力に依拠する。特定のユーザは、さまざまな方法で、異なるアドレスを有するさまざまなロケーションでネットワークに接続することがあるため、好ましい手法としては、ユーザまたはグループに一意の同一性を割り当て、次いで、その同一性をプロトコルを介して特定のアドレスまたはアドレス群に解決するものがある。本発明の同一性管理システムおよび方法が特に適用されるそのようなピアツーピア名前解決プロトコルPNRPは、それによって本発明は限定されないが、2001年8月29日に出願されたPeerToPeerNameResolutionProtocolAndMultilevelCacheForUseTherewithという名称の同時係属の特許出願第09/942,164号、2002年4月15日に出願されたMultiLevelCacheArchitectureandCacheManagementMethodforPeerToPeerNameResolutionProtocolという名称の同時係属の特許出願第10/122,863号、および、2001年9月19日に出願されたPeerToPeerGroupManagementandMethodForMaintainingPeerToPeerGraphsという名称の同時係属の特許出願第09/955,923号に述べられており、これらの教示および開示は、それらを参照することによりその全体を本明細書に組み込む。しかし、本発明のP2Pグラフ処理インターフェースおよび方法は、これら同時係属の特許出願の特定のピアツーピアプロトコルに限定されず、均等な効力で他の解決プロトコルに適用することができることを、当業者なら以下の教示から理解するであろう。同様に、2001年9月19日に出願されたPeerToPeerNameResolutionProtocolSecurityInfrastructureAndMethodという名称の同時係属の特許出願第09/956,260号は、必ずしもネットワークに過剰なトラフィックの負担をかけることなしに、ネットワーク内のさまざまなエンティティの同一性が有効であることを保証する、基礎となるセキュリティインフラストラクチャについて述べている。P2Pグループ化環境では、2001年9月19日に出願されたPeerToPeerNameResolutionProtocolGroupSecurityInfrastructureandMethodという名称の同時係属の特許出願第09/955,924号が、そのようなグループに使用される基礎となるセキュリティインフラストラクチャについて述べている。これら特許出願の教示および開示もまた、それらを参照することによりその全体を組み込む。しかし、本発明のインターフェースおよび方法は、そのようなPNRPに特に適用され、そのようなPNRPと相互作用するが、本発明がそれによって限定されず、P2Pグラフ管理機能を提供したいと望むどのP2Pシステムまたはプロトコルにも適用されることを、当業者なら理解するであろう。PNRPについて述べている上述の組み込まれた同時係属の特許出願に論じられているように、および有用な背景を提供するためには個々のピア間でピア関係を確立することは、既存のピアツーピアネットワーク内でコストのかかるプロセスである。しかし、PNRPでは、各ノードが、ネットワーク内の他のノードへの参照のリストを含むルーティングテーブルを蓄積する。各ノードエントリについて、ノード識別、アドレス、ノードのキー、このノードのキーとローカルノードのキーとの間の距離を含むことができるアドレス情報が獲得される。ローカルノードは、遠隔ノードについて学習するたびに、そのノードが既知であるかどうか、既知でない場合にはエントリをルーティングテーブルに入力するかどうか検査する。各エントリは、キャッシュオーナからのその距離によって決定される理想的なキャッシュレベルを有する。新しいエントリは、その距離に対応するキャッシュレベルに追加し、あるいはエントリの理想的なキャッシュレベルがまだ破られていない場合には最も低いレベルに追加することができるだけである。PNRP内の個々のピア間の通信の場合、ノードは、照会を受信すると既に訪れたノードを除いて、キーが標的に最も合致するそのルーティングテーブル内のエントリを探索する。次いで、エントリを公示したノードに照会が直接転送される。適切なエントリがない場合には、そこから要求が受信されたノードに要求が送り返され、このノードは、それ自体のテーブル内の別のエントリを試すことになる。この要求は、キーがターゲットに合致するエントリに達した場合に成功となる。最大ステップ数で標的に達しなかった場合、または、そこから要求が受信されたノードが、可能な隣接者すべてを試し、否定応答を受信した場合に不成功となる。成功した要求の場合には、中間ホップすべてによって応答が中継される。この応答は、標的キーを保持するノードのアドレスを搬送し、エントリは、中間ノードのルーティングテーブル内に挿入される。ここで、本発明のグラフ管理システムおよび方法が特に適用される1つのP2P環境が提供されたので、次に図2について説明を行う。図2は、本発明が存在することができる例示的なP2Pフレームワーク200を示すが、そのようなフレームワークと共に使用することだけに限定されない。実際、本発明のP2Pグラフ管理システムおよび方法は、P2P同一性の完全な管理を可能にするインターフェースの調整された論理集合を必要とするフレームワークとともに、またはそれを望むさまざまなフレームワークと共に使用することができる。当然ながら、当業者なら、さまざまなアプリケーションプログラムが本発明のAPIを使用し、P2P環境内で望ましいさまざまなユーザ同一性の管理を可能にする豊かなユーザインターフェースおよび1組の関数が提供されることを理解するであろう。図2に示されているように、基礎となるP2Pグラフ処理インターフェース202は、P2Pフレームワーク200内で必要とされる情報すべてを含むデータ記憶204を使用する。データ記憶内の情報はまた、P2Pグラフ内での生産的な参加に必要なセキュリティを提供するP2Pグラフセキュリティ管理インターフェース206によって使用される。また、P2Pシステムが機能することを可能にするために、一般に何らかの形態のP2P名前-アドレス解決208が提供される。上記で論じたように、1つのそのようなシステムが、上記の同時係属の特許出願に述べられているPNRPシステムである。本発明のP2Pグラフ処理インターフェース202もまた、このフレームワーク200内に含まれる。これらの同一性管理インターフェース210の一実施形態の説明は、本明細書と同日に出願されたPeerToPeerIdentityManagementInterfacesAndMethodsという名称の同時係属の特許出願第10/309864号に含まれており、その教示および開示は、それらを参照することによりその全体を本明細書に組み込む。最後に、この例示的なフレームワーク200では、P2Pグループ内で適切な参加を可能にするために、1組のグループ化インターフェース212が提供されている。ここで、特に本発明のシステムおよび方法によって提供されるP2Pグラフ処理インターフェース202を考察すると、APIのこのグループは、ピアツーピアグラフを確立するために、およびピア間でデータを効率的かつ確実に渡すために、アプリケーション開発者に公開される。グラフ処理の基本構造202は、各ノードが、グラフ内のデータの一貫したビューを確実に有するようにする。グラフ処理技術の中核部分は、グラフノードである。ノードは、ネットワーク上の個人の特定のインスタンスを示す。ノードは互いに接続することができ、ノードのネットワークまたはグラフを形成する。ノードは、レコードの形態で互いの間においてデータを送信する。レコードは、本質的にグラフ内のノードすべてに押し流される送信されるデータ群である。レコードがノードによって受信された後で、ノードは、そのレコードをデータベースまたはデータ記憶内に配置する。グラフ処理は、各ノードのデータベースがまったく同じデータのビューを確実に有するようにしなければならない。グラフ処理は、各ノードを同期させておく。ノードが接続し、またグラフから切断したとき、グラフ内で分離または分割が発生する可能性がある。グラフ処理はまた、これらの分離を検出し修復しなければならない。グラフ内のノードは、そうするように望む場合には、従来のグラフ接続とは別個の接続を作成することができる。これらの直接接続は、ノードが任意のデータを互いに送信することを可能にする。最後に、グラフ処理は、アプリケーションがイベント通知を登録し、および受信することを可能にするイベントインフラストラクチャを有する。イベント通知は、グラフ処理が使用する機構であって、グラフ内で何かが変化したことに対してアプリケーションに警告する機構である。ピアグラフを確立するとのユーザの最初の所望に基づいて、アプリケーションプログラムは、本発明のAPIの初期化およびクリーンアップ関数を呼び出す。これらのAPIは、グラフ処理の基本構造202の起動およびシャットダウンを行う。グラフ処理起動ルーチンにより、使用を望む基本構造の正確なバージョンをアプリケーションが指定することが可能になる。P2Pグラフ処理を使用が可能となる前に、アプリケーションは、PeerGraphStartup関数を呼び出し、どのバージョンを使用したいかをグラフ処理の基本構造202に伝えなければならない。次いで、グラフ処理の基本構造は、要求されたバージョンであって、かつサポートしている最も高いバージョンで応答する。PeerGraphShutdown関数APIが、呼び出さなければならない最後のAPIである。これは、アプリケーションが基本構造を使い終えたことをグラフ処理の基本構造202に伝える。本発明の一実施形態においては、PeerGraphShutdown関数への呼出しは、PeerGraphStartup関数への各呼出しに合致しなければならない。これらの関数は、P2Pグラフ処理の基本構造に関するバージョン情報を含むピアバージョンデータ構造を使用する。この構造のパラメータは、コーラーの使用をインストール済みP2Pダイナミックリンクライブラリdllが期待するP2Pプロトコルのバージョン、およびインストール済みP2Pdllがサポートできる最も高いP2Pプロトコルのバージョンである。通常、これらは同じである。起動を開始するために、アプリケーションは、他のどの関数が呼び出されるよりも前に、まずPeerGraphStartup関数を呼び出す。この関数に渡されるパラメータは、要求されているバージョンである。これは、ピアツーピアプロトコルのバージョンのうちコーラーが使用できる最も高いバージョンである。このパラメータは、上位バイトがマイナーバージョン改訂版を指定し、下位バイトがメジャーバージョン番号を指定するワードであることが望ましい。この関数の出力パラメータは、P2PAPIのバージョンを指定する、また、システムにインストールされているP2Pdllによって提供されるサポートの詳細を受け取るピアバージョンデータ構造上述へのポインタである。この関数の戻り値は、動作の成功または失敗を示す。エラーメッセージは、失敗のタイプまたは理由を示す。エラーメッセージは、要求された関数を実行するのにメモリが結果的に不十分であったのエラー、サポートされていないバージョンの指定、すなわち、要求されたバージョンが、ローカルマシンにインストールされているP2Pサブシステムによってサポートされていないことに起因するエラーを含む。シャットダウンを開始するために、アプリケーションは、PeerGraphShutdown関数を呼び出す。この関数は、APIPeerGraphStartupに対する呼出しによって割り振られたどの資源もクリーンアップする。上記で示されているように、PeerGraphStartupに対する各呼出しについて1つのPeerGraphShutdownに対する呼出しが存在することが好ましい。この関数に必要とされるパラメータはない。この関数は、シャットダウン関数の成功または失敗の表示を返す。エラーの場合には、関数は適切なエラーコードを返す。PeerGraphStartup関数を呼び出した後で、アプリケーションが行わなければならない次のタスクは、使用のためグラフをセットアップすることである。このため、アプリケーションは、PeerGraphCreate関数またはPeerGraphOpen関数の呼び出しを行う。アプリケーションが新規の構造を作成したい場合には、まずグラフのプロパティを指定しなければならない。このプロパティは、グラフをセットアップするために必要とされる基本要素を指定する。次に、アプリケーションは、ノードと関連付けるためにデータベース名を指定しなければならない。プロパティとデータベース名に加えて、アプリケーションは、グラフにセキュリティを追加するために使用したいセキュリティインターフェースを指定しなければならない。最後に、アプリケーションは、PeerGraphCreate関数を呼び出し、新しいグラフを作成する。アプリケーションは、グラフを作成した後で遠隔ノードから入ってくる接続要求を聴取するために、PeerGraphListen関数を呼び出さなければならない。アプリケーションが、使用のためグラフをセットアップする第2の方法は、既存のグラフを開くことである。アプリケーションがグラフを開こうとする場合、2つのシナリオがある。第1のシナリオでは、グラフがノードによって初めて開かれようとしているすなわち、そのグラフのためのデータがノードのデータベース内に存在しない。この状況では、アプリケーションは、まずPeerGraphOpen関数を呼び出さなければならない。この呼出しで、アプリケーションは、接続するグラフ、グラフ内で使用する同一性、グラフと関連付けるデータベースを指定しなければならない。さらに、アプリケーションは、そのグラフを元々作成したPeerGraphCreate関数内に指定されているグラフのクリエータと同じセキュリティインターフェースを指定しなければならない。アプリケーションが初めてグラフを開いた後で、アプリケーションは、アプリケーションが何らかの帯域外outofband:OOB機構を介して発見したノードのIPを使用してPeerGraphConnect関数を呼び出さなければならない。ノードはまだデータベースを有していないため、PeerGraphListen関数に対するどの呼出しも失敗することになる。以下で論じるようにグラフ処理レイヤ202がノードを残りのグラフと同期した後で、アプリケーションは自由にPeerGraphListen関数を呼び出し、遠隔ノードから入ってくる接続要求を聴取する。第2のシナリオでは、一度グラフが発見されると、ノードがグラフを再び開くことが可能となる。アプリケーションは、初めてそのグラフを開いたときと同じ情報を指定しなければならない。ここでの違いは、その以前のグラフとの関係からノードがデータベースを有しているため、PeerGraphListen関数に対するどの呼出しも成功することになる点である。しかし、接続する他のノードが発見されなかった後で、または、この場合も、発見機構208を介して得られたIPアドレスを使用してPeerGraphConnect関数を呼び出した後に同期済みイベントを受け取った後でのみ行うべきである。ノードは、グラフを作成し、または開いた後で、グラフハンドルを受け取る。このハンドルは、本発明の以下のグラフ処理APIのほとんどで使用される。ノードがグラフから切断したいと望むときには、PeerGraphClose関数を呼び出し、グラフを閉じるだけで十分である。前述のグラフ起動/シャットダウンプロセスでは、アプリケーションは、ピアグラフプロパティを指定することが必要であった。これは、グラフポリシーについてのデータと他の情報を保持するPeerGraphPropertiesデータ構造を介して行う。このデータ構造に含まれる情報は、このデータ構造のサイズの指定をバイトで含む。この情報はまた、グラフ内でのピアの挙動に関連するピアグラフプロパティフラグのビットマスクを含む。これらのフラグについては、以下で論じる。たとえばリンクローカル、サイトローカルなど、どの範囲でグラフIDを公表publishすべきかを定義するScopeFlag。アプリケーションはまた、グラフ内で送信することができるレコードの最大サイズデータおよび属性をこの構造内で指定すべきである。PeerGraphCreate関数によって設定されることになるこのグラフの一意のグラフID識別子もまた指定しなければならない。この識別子は、マシン/ユーザの組合せについて一意でなければならない。さらに、グラフのクリエータの一意のクリエータID識別子が必要とされる。グラフのフレンドリ名friendlynameもまたこの構造内に提供すべきであるが、これはNULLに設定することができる。グラフについて述べるための任意選択のコメントフィールドもまた、この構造内に提供される。グラフ内のレコードの存在寿命PresenceLifetimeを制限するために、存在レコードが満了する前のレコード数が提供される。最後に、1つのグラフが含むことができる存在レコードの最大数が指定される。これのデフォルトは、実際のグラフサイズに基づいて動的に計算させることである。上記で紹介したピアグラフプロパティフラグには、ハートビートフラグと期間延長deferexpirationフラグが含まれる。ハートビートフラグは、グラフ作成時に指定され、グラフ内のノードがハートビートを公表し、グラフ内に存在し続けていることをグラフ内の他のノードに知らせるかどうか判定する。期間延長フラグは、グラフが接続されていないとき、ノードがそのグラフ内の少なくとも1つの他のノードに接続されるまで満了が発生しないことを示す。一度グラフが確立されると、ノードは、何らかの形態のセキュリティを使用し、レコードの妥当性検査をして人々をグラフ内に認証する。この機能を提供する本発明のピアセキュリティインターフェースは、APIがユーザの妥当性検査をするために呼び出すことになるグラフ処理の基本構造202へのセキュリティインターフェースを指定すること、およびグラフ内のレコードを安全にし、および解放することを可能にする。さらに、このセキュリティインターフェースは、アプリケーションが、セキュリティSSPの実装を含むdllのパスを指定することを可能にする。アプリケーションがコールバックにNULLを指定した場合には、基本構造は、レコードを安全にするために関数を呼び出すかわりに、レコードのセキュリティフィールド内にCRCチェックサムを入れる。そのような場合には、レコードの妥当性検査をするために関数を呼び出すかわりに、基本構造はCRCチェックサムを検証する。このセキュリティインターフェースに使用される構造用のパラメータは、構造のサイズ、SSPインターフェースを実装するDLLの任意選択のフルパス名、任意選択のパッケージ名を含む。また、このパラメータは、セキュリティ情報のバイト数、およびセキュリティ情報へのポインタグラフを作成する、または開く際に使用されることになるバイトを含むことができる。セキュリティコンテキストへ任意選択のポインタであって、レコードを妥当性検査する必要があるとき呼び出されることになる妥当性検査レコード関数へのポインタもまた同様に含まれる。セキュリティレコードへのポインタがNULLの場合には、この妥当性検査レコードポインタもまたNULLでなければならない。さらに、レコードを安全にする必要があるとき呼び出されることになる関数へのポインタを含むことができる。しかし、妥当性検査レコード関数へのポインタがNULLの場合には、これもまたNULLでなければならない。最後に、このセキュリティインターフェース構造は、セキュアレコードコールバックによって割り振られた任意のデータを解放するために使用される関数へのポインタを含むことができる。peervalidaterecordcallbackは、レコードの妥当性検査をするために呼び出すインターフェースを指定する。このAPIが基本構造によって呼び出されたとき、ピアレコード変更タイプの1つが渡される。これは、そのレコードに対して実行されるだけの動作である。アプリケーションは、この変更タイプに基づいてレコードを検証すべきである。アプリケーションが、レコードを検証するために依然としてより多くの情報を必要としている場合には、E_DEFFEREDを返すことができ、グラフ処理APIは、それを保留リストsetasidelist内に入れることになる。セキュリティ機構は、そのレコードの妥当性検査をするのに十分な情報を得た後で、peergraphvalidatedeferredrecords関数を呼び出さなければならない。一度この関数が呼び出されると、保留リスト内のどのレコードも、再び妥当性検査に提供されることとなる。ピアレコード妥当性検査関数のパラメータは、このレコードに関連付けられたグラフ、セキュリティコンテキストへのポインタ、妥当性検査をするレコード、妥当性検査の理由を述べるピアレコード変更タイプを含む。ピアレコード変更タイプpeerrecordchangetypeフラグは、変更タイプパラメータを介してコールバックに渡される。これらは、特定のレコードをどのように変更するかを関数に通知するために提供される。これは、そのタイプのレコード変更に対して作用する能力をセキュリティ関数群に与える。たとえば、これらの変更タイプは、ピアレコードの追加レコードIDまたはレコードタイプは、データベースに追加されている、レコードの更新レコードIDまたはレコードタイプは、グラフ内で更新されている、レコードの削除レコードIDまたはレコードタイプは、グラフから削除されている、またはレコードの満了レコードIDまたはレコードタイプは、データベースから消滅しているを含むことができる。peersecurerecordcallbackは、レコードを安全にするために呼び出すインターフェースを指定する。このAPIが基本構造によって呼び出されると、ピアレコード変更タイプの1つが渡される。これは、そのレコードに対してちょうど実行された動作を反映する。次いで、アプリケーションは、この変更タイプに基づいてレコードを検証すべきである。このコールバックのパラメータは、このレコードに関連付けられたグラフ、セキュリティコンテキストへのポインタ、安全にするレコード、妥当性検査の理由を述べるピアレコード変更タイプフラグ、このレコード用のセキュリティデータたとえば署名を含む。peerfreesecuritydatacallbackは、セキュリティコールバックによって返されたデータを解放するために呼び出すインターフェースを指定する。そのパラメータは、このレコードに関連付けられたグラフ、セキュリティコンテキストへのポインタ、解放すべきセキュリティデータへのポインタを含む。この関数は、動作が成功した場合に成功の表示を返し、そうでない場合には、この関数は、遭遇したエラーのタイプを示すエラー値を返す。これらは、無効なパラメータに起因するエラー、メモリ量の不足、その特定のP2PIDを有するグラフがすでに存在する場合のエラーを含む。このピアアドレスタグ構造は、グラフノードに接続するとき使用するIPアドレスについての情報を保持していることに留意されたい。この構造は、渡される構造のサイズ、および接続するノードのIPv6アドレスを示すパラメータを含む。以上、セキュリティインターフェースを含めて、ピアグラフの作成および管理について述べたので、次に、上記で述べた関数を実施するのに必要とされる特定のインターフェースの詳細に注目して説明を行う。上述のように、peergraphcreateインターフェースへの呼出しは、完全に新しいグラフを作成する。また、そのグラフに関連する情報、およびそのグラフが使用することになるセキュリティのタイプを指定する機会を提供する。この呼出しにより、グラフハンドルが割り振られるが、ネットワーク接続は確立されない。この関数を呼び出した後で、アプリケーションは、peergraphlisten関数を呼び出す前に、イベントを登録するsubscribe機会を有する。これらのイベントAPIは、アプリケーションがグラフに接続されていない場合に首尾よく呼び出すことができるAPIだけである。この期間中、他のどのAPI呼出しも、peergraphlistenAPIが呼び出されるまで失敗することになる。このpeergraphcreateインターフェースのパラメータは、グラフのすべてのプロパティ、作成時にこのグラフに関連付けるデータベースの名前、このグラフ用のセキュリティプロバイダについて必要とされる情報すべてを含むセキュリティインターフェースへのポインタを含む。このパラメータは任意選択であり、すなわちNULLとすることができる。これがNULLに設定されている場合には、APIは、上記で論じたCRCチェックサム機構を使用する。このAPIの出力は、作成されたグラフ用のハンドルに設定される。上記で論じたpeergraphopenAPIは、ローカルノードまたは遠隔ノードによって以前に作成されたグラフを開く。この呼出しにより、グラフハンドルが割り振られるが、ネットワーク接続は確立されない。先のAPIの場合と同様に、アプリケーションは、このAPIを呼び出した後で、イベントを登録するための機会を有する。しかし、アプリケーションは、入ってくる接続を受け入れるために、peergraphlistenAPIを呼び出さなければならない。このとき初めてグラフがこのノードによって開かれた場合には、そのノードがグラフに接続し同期するまで、peergraphlistenAPIへのどの呼出しも失敗することになることに留意されたい。このようにして、このノードは、古くなった、または誤った情報レコードを新しいノードに押し流すことができない。このpeergraphopenAPIのパラメータは、開くグラフの一意のグラフ識別子マシン/ユーザの組合せについて一意でなければならない、グラフを開く人の一意の識別子、作成時にこのグラフに関連付けるデータベースの名前を含む。このグラフ用のセキュリティプロバイダについて必要とされる情報を含むセキュリティインターフェースへのポインタもまた提供することができる。使用する場合、これは、peergraphcreate関数内に指定されているセキュリティインターフェースと同じとしなければならない。パラメータはまた、レコード同期優先配列recordsynchronizeprecedencearray内のレコードタイプ数、レコードが同期される順序を示すレコードタイプの配列を含む。デフォルトの順序が使用される場合には、このパラメータをNULLにすることができる。最後に、作成されたグラフへのハンドルが提供される。このAPIは、この関数の成功または失敗の表示を返す。これらのエラー表示は、無効な引数によるエラーの表示、および接続を処理する他のグラフメンバを見つけることができないためのエラーの表示を含む。グラフが、上述のように作成され、または開かれると、peergraphlistenAPIが呼び出され、次に来る接続の聴取を開始するようグラフに通知する。すなわち、このAPIを呼び出すことができるようになる前に、peergraphcreateAPIまたはpeergraphopenAPIを呼び出さなければならない。やはり上記で示されているように、このとき初めてグラフが開かれた場合には、そのノードがpeergraphconnectAPIを介してグラフに接続し、そのレコードをグラフと同期するまで、このAPIへのどの呼出しも失敗することになる。このAPIのパラメータは、聴取を開始するグラフ、聴取するipv6スコープ、聴取するipv6スコープID、聴取するポートを含む。このAPIは、成功または失敗の表示を返す。これらのエラー表示は、無効な引数によるエラーの表示、不十分なメモリによるエラーの表示、提供されたハンドルが無効であるためのエラーの表示を含む。ノードは、グラフ内の新しいノードに接続したいと望む場合、peergraphconnectAPIを呼び出す。これが初めての接続である場合には、やはりこのAPIは、グラフデータベースを同期しようと試みることになる。このAPIのパラメータは、グラフのハンドル、所与のアドレスで接続される人の一意のID指定されたアドレスで複数の同一性が接続される可能性があるため必要とされる、接続されるノードのアドレスなどについての詳細を含む構造へのポインタ、以下で論じる直接接続APIと共に使用される接続IDへのポインタを含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、不十分なメモリによるエラーの表示、提供されたポインタが無効であるとのエラーの表示を含む。peergraphcloseAPIは、peergraphcreateAPIへの、またはpeergraphopenAPIへの呼出しによって得られたグラフハンドルを無効にする。また、このグラフについてネットワークすべてを閉鎖する。このAPIのパラメータは、切断されるグラフのハンドルである。このAPIは、成功または失敗の表示を返す。これらのエラー表示は、無効な引数によるエラーの表示、および、提供されたハンドルが無効であるとのエラーの表示を含む。peergraphcloseAPIは、ノードをグラフから切断することを可能にするが、そのグラフを削除するわけではない。関連グラフのデータのそのような削除を実行するためには、アプリケーションがpeergraphdeleteAPIを呼び出す必要があるであろう。このAPIのパラメータは、データを削除するグラフの名前、データを削除するピアID、削除するグラフに関連付けられたデータベースの名前を含む。このAPIは、成功または失敗の表示を返す。これらのエラー表示は、無効な引数によるエラーの表示、提供されたハンドルが無効であるとのエラーの表示、要求された関数を実行するためのアクセスが拒絶されたとのエラーの表示を含む。今述べた本発明のシステムおよび方法によって提供されるグラフ形成および管理機能に加えて、本発明は、アプリケーションがグラフ/ノード情報を取り出し、管理することを可能にするアプリケーションプログラミングインターフェースを提供する。この情報の管理は、ノード特有の情報を容れたピアノード情報データ構造によって容易になる。このデータ構造のパラメータは、データ構造のサイズ、その隣接者に対するノード接続を識別する一意の識別子、上述の作成またはオープン関数の実行の間にそのノードについて設定されたピアの識別子、ピアアドレスの配列内のアドレス数、このインスタンスがどのアドレスおよびポートについてグループトラフィックを聴取するかを示すピアアドレスの配列、この特定のノードについて述べる属性を容れるために使用されるストリングデータフィールドを含む。このデータ構造を使用する本発明の1つのインターフェースは、peergraphgetnodeinformationAPIである。このインターフェースは、ユーザのいるノードについてノード特有の情報を取り出すために呼び出される。所与のマシン上に、あるグラフのいくつかのノードが存在する可能性がある、たとえば複数のユーザが所与のマシン上のグラフに参加している可能性があるために、この情報は、実際にはマシン毎ではなく、ノード特有であることに留意されたい。このインターフェースのパラメータは、グラフハンドル、アプリケーションが情報を取得したいと望むノードのノードIDを含む。ゼロに設定されている場合には、このインターフェースは、ローカルノードについての情報を取り出すことになる。この出力は、ローカルノードについての情報を含むピアノード情報データ構造である。APIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、不十分なメモリによるエラーの表示、提供されたハンドルが無効であるたとえば、ノードがもはやグラフに接続されていないとのエラーの表示を含む。ノードについての情報を取り出すことに加えて、本発明は、ローカルノードのインスタンスに対してアプリケーションがピアノード情報データ構造の属性を設定することを可能にする。この関数のパラメータは、グラフハンドル、およびアプリケーションがローカルノードに関連付けたい属性を示すストリングを含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示を含む。ノード情報を取り出すための能力に加えて、本発明は、現行のグラフのプロパティを取り出す能力を提供する。アプリケーションは、現行のグラフプロパティを取り出すpeergraphgetproperties関数を呼び出すことができる。返される構造は、現行のグラフプロパティについての情報を含む。この関数のパラメータは、グラフのハンドルであって、成功時にはグラフプロパティ構造へのポインタである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、不十分なバッファサイズによるエラーの表示を含む。本発明はまた、peergraphgetstatus関数への呼出しを介して、グループの状況の取出しを可能にする。この関数のパラメータは、グループへのハンドル、グループの状態として現在設定されている1組のピアグラフ状態フラグpeergraphstatusflagである。これらのフラグを使用し、ノードが接続を聴取しているか否か、ノードが他のノードに対する接続を有するか否か、ノードのデータベースが同期されているか否かを示すことができる。情報を取り出すことに加えて、本発明はまた、アプリケーションがグラフプロパティを設定することを可能にするインターフェースを提供する。この関数のパラメータは、グラフのハンドル、グラフプロパティ構造へのポインタを含む。このインターフェースは、グラフサイズ、フレンドリ名、グラフを含むことができる存在レコードの数、存在レコードが満了する前の秒数存在寿命をアプリケーションが修正することを可能にするのが望ましい。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、アクセスの拒絶によるエラーの表示を含む。本発明のシステムおよび方法はまた、現在のグラフ時間をローカルシステム時間に変換するインターフェースを提供する。このインターフェースのパラメータは、グラフのハンドル、変換されるグラフ時間へのポインタ、グラフ時間から導出されたローカルシステム時間に設定される出力を含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、アクセスの拒絶によるエラーの表示を含む。以上、本発明のグラフ初期化/クリーンアップ関数、グラフ作成/アクセス関数、およびグラフ/ノード情報関数について述べたので、次に、本発明のレコード管理機能に注目して説明する。レコードは、グラフのノード間で通信する方法である。レコードは、グラフを形作り、良好な接続を確実にするために使用される。レコードは、2つの部分、1バージョン、クリエータ、タイプを含む、レコードについての情報を有するヘッダと、2グループ全体にわたって押し流されるアプリケーション定義データであるコンテント部とを備える。このコンテント部はまた、データについて述べる名前-値属性をアプリケーションが追加することを可能にするXML構造を含む。このフィールドは、探索APIが調べる情報を指定するために使用することができる。本発明の一実施形態によれば、一度ノードがグラフ上で聴取されると、ノードは、グループ内で通信され記憶されるデータを操作することができる。アプリケーションが最初にしなければならないことは、レコードを獲得することである。アプリケーションはこれを、1新規のレコードを作成する、または2アクセス機能を使用する、という2つの方法のうちのいずれかで行うことができる。新規のレコードを作成するために、アプリケーションは、必要とされる情報およびデータでピアレコードを満たすことによって開始する。これを行った後で、peergraphaddrecord関数を呼び出し、レコードをデータベースに追加する。この関数は、レコードをデータベースに追加することに加えて、グラフ内の残りのノードにレコードを押し流す。アプリケーションは、そうする代わりに既存のレコードを獲得しようと決めた場合には、本発明のアクセス関数を使用することができる。アプリケーションがデータベースからレコードを取り出すために使用することができるそのような関数がいくつかある。第1は、peergraphgetrecord関数である。このAPIは、アプリケーションによって指定されたレコードIDGUIDから特定のレコードを取得する。第2は、peergraphenumeraterecordsAPIまたはpeergraphsearchrecordsAPIなど、列挙関数を介する。peergraphenumeraterecordsAPIは、レコードタイプ、またはノードの同一性に基づいてレコードの列挙を返す。peergraphsearchrecordsAPIは、属性フィールド内のデータに基づいてレコードをフィルタリングするために使用される探索クエリを受け入れる。各APIは、以下で論じるピアネットワーク化列挙APIと共に使用することができる列挙を返す。レコードが作成され、または取り出された後で、アプリケーションは、レコードを更新または削除することができる。アプリケーションは、レコードの更新を望む場合、単に望むフィールドを更新し、peergraphupdaterecordAPIを呼び出す。このAPIは、データベース内のレコードを更新し、グラフ内の各ノードにレコードを押し流す。最後に、peergraphdeleterecordAPIを呼び出すことによって、レコードをグラフから削除することができる。このAPIは、実際にはレコードをデータベースから除去しないことに留意されたい。そのかわりに、このAPIは、削除するためにレコードをマークし、残りのグラフにこの削除を伝える。レコードは、満了するまでデータベースから除去されない。本発明のAPIによって使用されるレコード管理構造は、ピアデータ構造を含む。アプリケーションが見るこのレコードオブジェクトは、ピアデータ構造によって定義され、そのパラメータとして、バッファポインタによって指されるデータのサイズバイト、およびデータ自体を含むバッファへのポインタを含む。ピアレコードデータ構造は、そのパラメータとして構造のサイズを含み、このサイズは、ピアレコードヘッダのサイズに設定しなければならない。また、パラメータは、レコードのタイプ、P2P基本構造によって提供されたレコードのID、アプリケーションがpeergraphaddrecordAPIまたはupdaterecordAPIを呼び出したとき基本構造によって提供されたレコードバージョンを含む。このデータ構造はまた、レコードに適用されるべき任意の特別な処理を示すさまざまなフラグを含むことができる。レコードクリエータの一意の識別子もまた含まれ、レコードを変更する最後の人の一意の識別子も同様である。このデータ構造はまた、XMLストリングとして指定され、レコードに関連付けられる属性-値ペアの集合を含む。属性は、探索エンジンが、レコードに関連するデータを捜す所である。ここに置かれたレコードの内容についての情報は、エンジンによって見つけ出される。エンジンが属性を認識して見つけるために、このストリングは、探索XML方式searchXMLschemeに従わなければならない。従わない場合には、探索エンジンは、このレコードに関連する結果を返さないことになる。P2P基本構造によって提供されたときレコードが作成されたUTC時間、レコードが満了するUTC時間、レコードが最後に修正されたUTC時間もまた、この構造に含まれる。CRCチェックサムをデフォルトとして使用するピアデータ構造用のセキュリティデータもまた含まれる。最後に、このデータ構造は、実際のレコードデータを含む。上記で論じたフラグは、自動リフレッシュと呼ばれるピアレコードフラグを含む。このフラグは、このレコードが満了しようとする際レコードを自動的にリフレッシュするよう、P2Pシステム内で使用されているグループ化API群に伝えるために使用される。設定することができる他のピアレコードフラグを削除済みと呼ぶ。このフラグは、レコードが削除済みとマークされていることを示す。以上、本発明のレコード管理API群およびデータ構造について述べたので、次に、上述した個々のレコード管理API群の各々の詳細に注目して説明する。最初に、peergraphaddrecordAPIは、上記で紹介したように、グラフに新しいレコードを追加するために使用される。このAPIを用いて追加されたレコードは、グラフ内の各ノードに送られる。このAPIのパラメータは、グラフハンドル、レコードデータへのポインタ、およびグラフ内のレコードを一意に識別するレコードIDに対して設定されるポインタを含む。レコード内では、サイズ、タイプ、および満了だけが必要とされ、一方、データおよび属性は任意選択であることに留意されたい。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、アクセスの拒絶によるエラーの表示を含む。アクセスの拒絶は、追加することができないレコードタイプをピアが追加を試みたとき発生する。上記で紹介したpeerupdaterecordAPIは、グラフ内でレコードを更新する。さらに、この関数は、バージョン番号を更新し、グラフ内の各ノードにレコードを押し流す。この関数のパラメータは、グラフハンドル、およびレコードに関連付ける新しいデータへのポインタを含む。修正することができるレコード内のフィールドは、サイズ、フラグ、属性、満了時間より長い満了時間に、セキュリティデータ、およびデータ自体である。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、アクセスの拒絶によるエラーの表示を含む。上記で説明したように、peergraphdeleterecordAPIは、レコードをグラフ内で削除済みとマークする。このAPIは、実際にはレコードをデータベースから除去しない。そのかわり、レコードを削除済みとマークしてグラフに送り出す。これは、グラフ内の各ノードがデータベースの同一のビューを確実に有するようにするために行われる。このAPIのパラメータは、グラフハンドル、削除するレコードIDへのポインタ、およびローカルフラグである。このフラグが真に設定されている場合には、このAPIは、グラフの他のノードにこの削除を送り出さない。このAPIは、そうするかわりにローカルデータベースから除去するだけである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、アクセスの拒絶によるエラーの表示を含む。レコードを削除することは、レコードヘッダ内でピアRF無効フラグpeerRFinvalidflagを設定してレコードを更新することにより、レコードを無効とマークして次いでそのレコードを満了させることを意味する。しかし、実際のレコードペイロードは、削除することが好ましい。peergraphgetrecordAPIは、アプリケーションが、レコードIDを介して特定のレコードを取り出すことを可能にする。返されたレコードは、peergraphfreedataAPIを呼び出すことによって解放すべきである。このAPIのパラメータは、グラフハンドル、取り出すレコードIDへのポインタ、取り出されたレコードへのポインタに対して設定されるポインタである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、レコードがデータベースにないことの表示、アクセスの拒絶によるエラーの表示を含む。peergraphenumeraterecordsAPIは、特定のタイプおよび/またはクリエータのレコードすべてにわたって反復を開始する。これは、現在時間でのレコードのスナップショットである。このAPIのパラメータは、グラフハンドル、反復を行うレコードのタイプへのポインタである。このポインタがNULLである場合には、このAPIは、全レコードにわたって反復を行うことになる。このAPIはまた、ピアIDを識別するパラメータを含む。指定されている場合には、このAPIは、そのピアIDによって作成されたレコード群だけにわたって反復を行うことになる。NULLの場合には、このAPIは、すべてのユーザによって作成されたレコードにわたって反復を行う。このAPIはまた、反復へのハンドルを生成する。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示を含む。peergraphsearchrecordsAPIは、特定のレコードを探索するために使用される。このAPIのパラメータは、グラフハンドル、クエリを記述されたXMLストリング、および列挙ハンドルである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、初期化するのに失敗したことによるエラーの表示、他のレコードがないことによるエラーの表示を含む。新しいレコードがグラフ隣接者から入ってきたとき、peergraphvalidatedeferredrecordsAPIは、peergraphcreateAPIまたはpeergraphopenAPIへの呼出しの期間中にピアセキュリティインターフェース内で指定されたvalidaterecordcallbackを呼び出すことによって、レコードの妥当性検査を試みることになる。セキュリティモジュールが妥当性検査を実行するのに必要とする情報すべてをまだ有していない場合がある。そのような場合には、このAPIは、レコードの妥当性検査をするのではなく、期間延長エラーメッセージを返すことになる。次に、グラフ処理レイヤは、レコードを一時期間延長テーブルに移動する。セキュリティモジュールは、妥当性検査の実行を準備する際、peergraphvalidatedeferredrecordsAPIを呼び出し、グラフ処理レイヤにどの期間延長レコードも再提出するように依頼することができる。パラメータは、グラフハンドル、レコードID群へのポインタ内に指定されたレコードIDrecordideaの数を含む。これがゼロの場合には、グラフ処理レイヤは、現在期間延長されているあらゆるレコードについてvalidaterecord関数を呼び出すことになる。最後に、このAPIは、再び妥当性検査すべきレコードIDの配列へのポインタのパラメータを含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラー、および初期化されていない場合のエラーの表示を含む。以上、本発明のレコード管理API群の説明を完了したので、次に、本発明のグラフ処理API群の一部を形成するエクスポート/インポートAPIに注目して説明する。アプリケーションは、peergraphexportdatabaseAPIを呼び出すことにより、データベースを特定のファイルにエクスポートすることができる。アプリケーションは、ノードがグラフに少なくとも1回接続し、上記で論じたpeergraphopenAPIをアプリケーションが呼び出した後でのみ行うことができる。アプリケーションはまた、peergraphimportdatabaseAPIを呼び出すことにより、データベースをインポートすることができる。アプリケーションは、有効なグラフハンドルを得た後でのみ行うことができる。peergraphexportdatabaseAPIは、異なるマシンに移動しpeergraphimportdatabaseAPIを呼び出すことによってそこにインポートすることができるファイル内に、グラフデータベースをエクスポートする。このAPIのパラメータは、グラフのハンドル、エクスポートされたデータが記憶されるファイルへのパスである。そのファイルがすでに存在し、いずれかのデータを含む場合には、その中のデータは上書きされることになる。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示を含む。peergraphimportdatabaseAPIは、peerimportgraphdatabaseAPIを呼び出すことによって得られるグラフデータベースを示すファイルをインポートする。このAPIは、上記で説明したpeergraphlistenAPIをユーザがまだ呼び出していない場合にのみ首尾よく呼び出すことができる。このAPIのパラメータは、グラフのハンドル、およびインポートするファイルへのパスを含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示を含む。本発明のグラフ処理API群はまた、ノードに関係する存在情報の管理および通信を可能にする。peergraphsetpresenceAPIは、ノードがグラフに能動的に接続され、グラフを聴取していることを他のグラフメンバに通知するために使用される。このAPIのパラメータは、グラフハンドル、および真の場合にノードが存在する情報をそのグラフに押し流されるフラグである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラー、および初期化されていない場合のエラーの表示を含む。peergraphenumeratenodesAPIは、グラフ内のノードすべての列挙を開始するために使用される。グラフポリシーに応じて、接続されている一部のノードは、その存在を公表していないために一覧enumerationに現れない可能性がある。このAPIのパラメータは、グラフハンドル、アプリケーションがノードの一覧を得たいと望むピアID、存在するピアにわたって反復を行うために使用される列挙ハンドルへのポインタである。アプリケーションは、peergraphgetnextitemAPIを使用して実際のピアを取り出し、peergraphendenumerationAPIを使用し、この一覧に関連付けられた資源を解放する。peergraphgetnextitemAPIは、peergraphenumeratepresenceAPIへの呼出しから返された列挙ハンドルに対して使用されたとき、ピアノード情報タイプtypepeernodeinformationのデータを返すことになる。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、および初期化されていない場合のエラーの表示を含む。本発明のグラフ処理API群はまた、ユーティリティ/サポート関数を含む。これらは、2タイプのユーティリティ/サポート関数である。第1は列挙サポートであり、第2はメモリサポートである。列挙関数は、アプリケーションが受け取ったピア一覧への任意のハンドルに対して作用する。ピア一覧へのハンドルは、peergraphenumeraterecordsAPIおよびpeergraphsearchrecordsなどの関数から得ることができる。一度一覧が得られると、アプリケーションは、peergraphgetitemcountAPIを呼び出すことによって、一覧内のアイテム数を取得することができる。一覧からアイテムを取得するために、アプリケーションは、peergraphgetnextitemAPIを呼び出さなければならない。アプリケーションは、一覧から受け取りたいアイテムの数を指定することができる。アプリケーションが、一覧内にあるものより多くのアイテムを要求した場合には、この関数は、一覧内のアイテムの数を返す。メモリサポート関数は、peergraphfreedata関数である。アプリケーションは、グラフ処理APIからデータを受け取った場合には、この関数を使用してデータを解放しなければならない。さらに、peergraphgetnextitemAPIは、このAPIを使用して解放しなければならないデータを返す。peergraphgetnextitemAPIは、ピア一覧へのハンドルを返す任意のAPIへの呼出しによって開始された反復内で次のアイテムを取得する。そのようなAPIは、peergraphenumeraterecordsAPI、peergraphsearchrecordsAPI、peergraphenumerateneighborsAPI、peergraphenumeratepresenceAPIを含む。返されたアイテムはすべて、peergraphfreedataAPIへの単一の呼出しを使用して解放しなければならない。アプリケーションは、返されるレコードの範囲を要求することができる。このAPIは、要求されたレコードの数以下を返すことになる。返されるデフォルト数は1である。このAPIのパラメータは、列挙ハンドル、読み取るアイテムの数戻りの際、読み取られたアイテムの実際の数が含まれる、アイテムの配列へのポインタである。返される実際のデータは、一覧のタイプによって決まる。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、並びにアイテムが1つもない場合、および初期化されていない場合のエラーの表示を含む。peergraphendenumerationAPIは、一覧に関連付けられたどの資源も終了させ、解放する。一覧が1つもアイテムを含まない場合には、アイテムが1つもないことを示すエラーが返される。このAPIの唯一のパラメータは、クリーンアップする一覧へのハンドルである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効なハンドルによるエラーの表示を含む。peergraphgetitemcountAPIは、一覧内の最大数のアイテムを取り出すために使用される。一覧において反復している間に、いくつかのアイテムが無効になる可能性があるため、peergraphgetnextitemAPIから返されるアイテムの数は、ここで返されるアイテム数より少ない可能性がある。これは、ハンドルが最初に作成されたとき、一覧内のアイテムの数を示す。この基本構造の動的な性質のため、peergraphgetnextitemAPIを介して取り出されるアイテムの数がこの数に等しくなる保証はない。このAPIのパラメータは、グラフハンドル、一覧内のレコードの数である。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示を含む。peergraphfreedataAPIは、上記で説明したさまざまなグラフ処理API群によって返された資源を解放する。グラフ処理APIによって返されたどのデータも、このAPIを使用して解放しなければならない。このAPIのパラメータは、解放するアイテムへのポインタである。本発明のシステムおよび方法はまた、ノード対ノード直接通信を実現する。直接通信API群は、データを押し流す必要なしに、ノードが互いにメッセージを送信することを可能にする。アプリケーションは、隣接者すなわち、グラフ処理の基本構造のためアプリケーションが接続を有するノードまたは直接接続すなわち、アプリケーションが直接通信APIと接続を開始したためローカルノードに接続されている遠隔ノードにデータを送信することができる。アプリケーションは、直接接続の生成を所望の場合、まずpeergraphopendirectconnectionAPIを呼び出さなければならない。これは接続を確立する。一度接続が確立されると、ノードは、peergraphsenddataAPIを介して、接続上でデータを送信することができる。アプリケーションは、この送信API内のタイプパラメータを介して送信されるデータのタイプを記載することができることに留意されたい。アプリケーションは、直接接続を終えた後で、peergraphclosedirectconnectionAPIを呼び出して接続を解体しなければならない。直接接続は、グラフの維持を考慮していない。アプリケーションはまた、隣接者フラグを指定すること、およびpeergraphsenddataAPIを使用することによって、隣接者ノードにデータを送信することができる。アプリケーションは、直接接続確立/クローズ関数のどちらも呼び出す必要がない。これらの直接通信API群は、ピア接続情報構造と呼ばれる直接通信構造を使用する。この構造のパラメータは、渡される構造のサイズ、この構造が参照する接続のタイプ、この接続の接続ID、接続される他端のノードのノードID、アプリケーションが接続を有するノードのピアID、および接続のアドレスを含む。接続のタイプは、2つのフラグによって示される。ピア接続隣接者フラグpeerconnectionneighborflagは、この接続が隣接者接続であることを指定し、ピア接続直接フラグpeerconnectiondirectflagは、この接続が直接接続であることを指定する。peergraphopendirectconnectionAPIは、上述の直接接続を生成する。グラフ処理API群は、データを送信するために、アプリケーションがグラフ内のノードとの接続を確立することを可能にする。この接続は、グラフ維持に役立たない。このAPIのパラメータは、グラフのハンドル、あるアドレスで接続される人の一意のID指定されたアドレスで複数の同一性が接続される可能性があるため必要とされる、接続されるノードのアドレスなどについての詳細を含む構造へのポインタ、および直接接続の接続IDを含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、および所与のIDを有するピアが存在しない場合のエラーの表示を含む。また、ピアノードが接続を拒否したことを示すためのエラーがある。peergraphclosedirectconnectionAPIは、特定の直接接続を閉鎖する。このAPIのパラメータは、グラフのハンドル、および切断する隣接者のIDである。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、および所与のIDを有する接続が存在しない場合のエラーの表示を含む。peergraphsenddataAPIは、接続されている隣接者または直接接続にデータを送信するために使用される。この関数は、データがネットワークレイヤに渡されると直ちに戻ることになる。換言すれば、グラフ処理レイヤは、他方の側からの肯定応答を待たない。このAPIのパラメータは、グラフのハンドル、データを送信する接続の一意の識別子、送信されるデータのアプリケーション定義タイプ、次のパラメータによって指されるバイト数、隣接者に送信する実際のデータを含む。このポイントツーポイントデータを受け取るための機構の特徴は、ピアグラフイベント入来データタイプtypepeergrapheventincomingdataのイベントに登録することにある。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、および接続が存在しない場合のエラーの表示を含む。peergraphenumerateconnectionsAPIは、そのパラメータとして、グラフのハンドル、上記で論じたピア接続フラグに基づいて列挙する接続のタイプ、および接続の一覧へのポインタを含む。このAPIは、成功または失敗の表示を返す。このエラー表示は、無効な引数によるエラーの表示、および接続が存在しない場合のエラーの表示を含む。本発明のイベントインフラストラクチャは、グラフとそれに関連付けられたデータの変更についてアプリケーションに通知することを可能にする。アプリケーションが変更について通知を受け取りたい場合には、アプリケーションが最初にしなければならないことは、通知を受けたいイベントを特定する登録構造を完成させることである。この登録により、アプリケーションは、通知を受けたいイベントタイプを指定することが可能になる。イベントが、関連付けの可能な特定のタイプのデータを有する場合には、これもまた登録内で指定される。たとえば、アプリケーションは、特定のレコードタイプの変更について通知するために登録することができる。そのためには、アプリケーションは、イベントタイプとしてピアグラフイベントレコード変更済みpeergrapheventrecordchangedイベント、および通知を受けたいレコードタイプのGUIDを指定する登録構造を作成する。アプリケーションは、登録構造を得た後で、peergraphregistereventAPIを呼び出し、そのイベントを関連付けたいイベントハンドルを指定する。あるイベントハンドルにいくつかのイベントを関連付けることができることに留意されたい。一度アプリケーションが関心のあるイベントが発生したならば、イベントハンドルは、イベントが発生したことを知らされる。次いで、アプリケーションは、そのイベントに関連付けられたデータを取り出すために、peergraphgeteventdataAPIを呼び出さなければならない。このAPIは、2つの重要なデータを含む構造を返す。第1は、イベントに関連付けられた登録であり、第2は、そのイベントに関連付けられたデータである。アプリケーションは、アイテムが1つもないことを示すエラーメッセージが発生するまで、引き続きpeergraphgeteventdataを呼び出すべきである。アプリケーションは、特定のハンドルに関連付けられたイベントについてもはや通知を望まないとき、peergraphun-registereventAPIを呼び出すことによって、単にその関心を登録抹消する。本発明のイベントインフラストラクチャは、7つのデータ構造を使用する。第1は、ピアグラフイベント登録peergrapheventregistration構造である。アプリケーションは、イベント通知に登録するとき、通知登録を解釈するために必要とされるコンテキストデータを含み、および通知が発生すると通知に関連するデータを返すために使用されるピアイベント登録構造の配列を提供する。この構造のパラメータは、ピアが関心のあるイベントのタイプ下記で指定されるイベントタイプの1つでなければならない、およびレコードタイプを含む。指定されたイベントタイプがレコードに作用する場合には、指定されたレコードタイプのレコードに対してだけイベントを発するように、このレコードタイプを指定することができる。このパラメータは、すべてのレコードタイプについてイベントを発生させるためにNULLとすることができる。このフィールドは、レコードに対して作用するイベントタイプについて無視される。この登録は、アプリケーションが通知を受けたいイベントタイプを取る。イベントタイプは、グラフが変更済み状況を有する接続された、など、グラフプロパティ構造内のフィールドが変更されたこのイベントが発せられた場合には、アプリケーションはすでに変更を有し、peergraphgetpropertiesAPIを使用して、更新された構造を取得しなければならないため、データは使用可能でない、レコードタイプまたは特定のレコードが何らかの形で変更された、ピアの直接接続が変更された、ピア隣接者との接続が変更された、直接または隣接者接続からフラッディングではなくデータが受信された、グラフが不安定になったクライアントは、新しいノード上でpeergraphconnectAPIを呼び出すことによって応答すべきである、グラフ内でノードの存在状況が変更された、およびある種のレコードタイプの同期がとられたことに関するイベントを含むことができる。アプリケーションは、一度イベント通知を受け取ると、データをそのイベントに関連付けることができる。データはすべて、ピアグラフイベントデータpeergrapheventdata構造内に一般化される。イベントに応じて、ユニオン内の適切なフィールドが書き込まれるfillout。ユニオン内のフィールドの1つを除くすべては、この構造へのポインタである。ユニオンの各メンバが定義される。構造内のどれも設定することができない。イベントタイプはイベントに対応するイベントデータであり、状態フィールドは、ピアグラフイベント状態変更peergrapheventstatuschangeイベントが発せられた場合に書き込まれる。これは、ノードのグラフとの接続に関して何かが起こったことを意味する。入来データフィールドは、ピアグラフイベント隣接者データpeergrapheventneighbordataまたはピアグラフイベント直接データpeergrapheventdirectdataイベントが発せられた場合に書き込まれる。これは、隣接者または直接接続から送られたのではなくノードがデータを受信したことを意味する。レコード変更データフィールドは、ピアグラフイベントレコード変更peergrapheventrecordchangeイベントが発せられた場合に書き込まれる。これは、アプリケーションが通知を依頼したレコードまたはレコードタイプが変更されたことを意味する。接続変更データフィールドは、ピアグラフイベント隣接者接続peergrapheventneighborconnectionまたはピアグラフイベント直接接続peergrapheventdirectconnectionイベントが発せられた場合に書き込まれる。これは、隣接者または直接接続状態の何らかの面が変更されたことを意味する。ノード変更データフィールドは、ピアグラフイベントノード変更済みpeergrapheventnodechangedイベントが発せられた場合に書き込まれる。これは、グラフ存在状態内の何らかのノードが変更されたことを意味する。同期データフィールドは、ピアグラフイベント同期済みpeergrapheventsynchronizedイベントが発せられた場合に書き込まれる。これは、何らかのレコードタイプが同期するのを終えたことを意味する。ピアイベント入来データpeereventincomingdata構造では、ユニオンは、入来データイベントが発せられた場合にデータへのポインタを含む。これは、隣接者または直接接続からの押し流しでなくノードがデータを受信したことを意味する。この構造のフィールドは、構造のサイズ、データが来た接続の一意の識別子、入来データのアプリケーション定義データタイプ、および受け取った実際のデータを含む。ピアイベントレコード変更データpeereventrecordchangedataは、ピアグラフイベントレコード変更peergrapheventrecordchangeイベントが発せられた場合にユニオンがそれへのポインタを含む構造である。これは、アプリケーションが通知を依頼したレコードまたはレコードタイプが変更されたことを意味する。この構造は、構造のサイズ、アプリケーションがイベントを登録したレコードまたはレコードタイプに発生した変更のタイプ、変更された一意のレコードID、および変更された一意のレコードタイプを含む。ピアレコード変更タイプは、レコードIDまたはレコードタイプがデータベースに追加されたことを示すためのピアレコード追加済みpeerrecordaddedタイプ、レコードIDまたはレコードタイプがグラフ内で更新されたことを示すためのピアレコード更新済みpeerrecordupdatedタイプ、レコードIDまたはレコードタイプがグラフから削除されたことを示すためのピアレコード削除済みpeerrecorddeletedタイプ、およびレコードIDまたはレコードタイプがデータベースから消滅したことを示すためのピアレコード満了済みpeerrecordexpiredタイプを含む。ピアイベント接続変更データpeereventconnectionchangedata構造は、ピアグラフイベント隣接者接続peergrapheventneighborconnectionイベントまたはピアグラフイベント直接接続peergrapheventdirectconnectionイベントが発せられた場合にユニオンがそれへのポインタを含む構造である。これは、隣接者または直接接続状態の何らかの面が変更されたことを意味する。この構造は、構造のサイズ、隣接者または直接接続が受けた変更のタイプ、変更元の接続の一意の識別子、および変更元のノードの一意の識別子を含む。ピア接続状況タイプは、新しいノードがローカルノードに接続されたことを示すピア接続済みpeerconnectedタイプ、接続が切断されたローカルノードによって、または遠隔ノードによって行うことができることを示すピア切断済みpeerdisconnectedタイプ、およびそのノードへの接続の試みが失敗したことを示すピア接続失敗peerconnectionfailedタイプを含む。ピアイベントノード変更データpeereventnodechangedata構造は、ピアグラフイベントノード変更済みpeergrapheventnodechangedイベントが発せられた場合にユニオンがそれへのポインタを含む構造である。これは、グラフ内の何らかのノードが、その存在状態を変更したことを意味する。この構造は、構造のサイズ、ノードの新しい存在状態ピア存在変更タイプ、変更されたノードのグラフの一意のID、および変化したノードのピアIDを含む。ピア存在変更タイプは、ノードがグラフ内に存在するようになったことを示すピア存在変更接続済みpeerpresencechangeconnectedタイプ、ノードがグラフから消えたことを示すピア存在変更切断済みpeerpresencechangedisconnectedタイプ、およびノードがその情報たとえば、属性を更新したことを示すピア存在変更更新済みpeerpresencechangeupdatedタイプを含む。ピアイベント同期済みデータpeereventsynchronizeddata構造は、構造のサイズ、および同期されたレコードのタイプを含む。以上、イベントインフラストラクチャと、その中で使用されるデータ構造について述べたので、次に、個々のAPI群の詳細に注目して説明する。peergraphregistereventAPIは、グラフおよびイベントタイプに関連する変更について通知を受けることへのピアの関心を登録する。このAPIのパラメータは、グラフのハンドル、新しいイベントに基づいて伝えられるイベントハンドルを含む。イベントハンドルは、自動リセットとすべきである。伝えられたとき、アプリケーションは、取り出すアイテムが1つもないことの表示が返されるまで、peergraphgeteventdataAPIを呼び出さなければならない。また、パラメータは、ピアイベント登録データ構造の数のカウント、要求されている通知についてのデータを含むピアイベント登録データ構造の配列へのポインタ、および通知を登録抹消するためのpeerun-registereventhandleAPIへの呼出しの中で使用することができるピアイベントハンドルを含む。このAPIは、成功または失敗の表示を返す。この失敗表示は、無効な引数による失敗の表示を含む。peergraphun-registereventAPIは、グラフおよびレコードタイプに関連する変更について通知を受けることへのアプリケーションの関心を登録抹消する。このAPIのパラメータは、peerregistereventhandleAPIへの呼出しから得られたハンドルである。このAPIは、成功または失敗の表示を返す。この失敗表示は、無効な引数による失敗の表示を含む。peergraphgeteventdataAPIは、アプリケーションがイベントを取り出すことを可能にする。取り出すイベントが1つもないことを示す表示が返される。イベントはすべて、データをピアグラフイベントデータ構造の形態で受け取る。どのイベントが発せられたかに応じて、対応するデータ構造が返される。このAPIのパラメータは、peerregistereventhandleAPIへの呼出しによって得られたハンドル、および通知についてのデータを含む。MicrosoftWindows登録商標XPオペレーティングシステムに特に適した本発明のインターフェースおよび方法の一実施形態においては、API群を以下のようにすることができる。本発明のさまざまな実施形態に関する前記説明は、例示および説明のために提供されている。消尽、または開示されたその実施形態に本発明を限定することは意図されていない。上記の示唆に鑑みて、多数の修正形態または変形形態が可能である。考察した実施形態は、本発明の原理とその実際的な応用を最もよく示し、それによって、さまざまな実施形態で、および企図されている特定の使用に適したさまざまな修正形態と共に、当業者が本発明を使用することを可能にするように選択され述べられた。そのような修正形態および変形形態はすべて、添付の特許請求の範囲が公平に、法的に、正当に権利を与えられる広さに従って解釈されたとき、添付の特許請求の範囲によって決定される本発明の範囲内にある。"