PNRP と WSASetService
PNRP では、 WSASetService 関数を使用して ピア名を登録または削除します。
名前の登録
登録には、サービスに接続できるピア名とエンドポイントのセットが含まれます。 登録は PNRP クラウドに固有です。 ピアが登録されると、登録と登録情報の他のノードへの伝達の間に遅延が発生します。 この間、他のノードが新しく登録されたピアを解決できない場合があります。
サービスの登録は永続的ではありません。
- ピア名を登録するクライアント プロセスが終了するか 、WSACleanup を呼び出すと、ピア名は登録解除されます。
- 指定したピア名が現在のプロセスによって同じクラウドに既に登録されている場合は、新しい登録値に置き換えられます。
ピア名を登録するときは、次のパラメーター値を指定する必要があります。
- essOperation パラメーターの値は RNRSERVICE_REGISTER である必要があります。
- dwControlFlags パラメーターは 0 (0) である必要があります。
ピア名を登録する場合、lpqsRegInfo パラメーターによって参照される LPWSAQUERYSET 構造体には、次の値が含まれている必要があります。
-
Dwsize
-
この構造体のサイズを指定します。
-
lpszServiceInstanceName
-
登録するピア名を指定します。 ピア名がセキュリティで保護されていない場合、ID は省略可能です。 ID が NULL として指定されている場合、PNRP ではコンピューターのローカル ID が既定で使用されます。
-
lpServiceClassID
-
SVCID_PNRPNAMEする必要があります。
-
lpVersion
-
無視されます。 NULL に設定 します。
-
lpszComment
-
無視されます。 ただし、文字列は 、NULL 終端記号を含め、40 文字未満である必要があります。
-
dwNameSpace
-
NS_PNRPNAMEまたはNS_ALLである必要があります。
-
lpNSProviderID
-
NS_PROVIDER_PNRPNAMEまたは NULL である必要があります。
-
lpszContext
-
クラウド名、空の文字列、または NULL である必要があります。 この値が NULL または空の文字列の場合は、既定のクラウド "Global" が使用されます。 それ以外の場合は、有効なクラウド名を指す必要があります。
-
dwNumberOfProtocols
-
無視されます。 0 (0) に設定します。
-
lpszQueryString
-
無視されます。 NULL に設定 します。
-
dwNumberOfCsAddrs
-
サービスによって登録されるアドレスの数を指定します。 1 つの名前に登録できるアドレスの最大数は 10 です。
-
lpcsaBuffer
-
登録するアドレスの一覧へのポインター。
-
dwOutputFlags
-
無視されます。 0 (0) に設定します。
-
lpBlob
-
PNRPINFO 構造体を指す BLOB 構造体へのポインター。 PNRPINFO 構造体の特定のパラメーターを設定する必要があります。 詳細については、次の PNRPINFO 構造体に関するセクションを参照してください。
PNRPINFO 構造体
LPWSAQUERYSET 構造体の lpBlob メンバーが設定されている場合は、PNRPINFO 構造体の次のメンバーを設定する必要があります。
-
Dwsize
-
この構造体のサイズを指定します。
-
lpwszIdentity
-
PeerIdentityCreate を使用して作成されるピア名の ID を指定します。 ピア名がセキュリティで保護されていない場合、ID は省略可能です。 ID が NULL として指定されている場合、PNRP は既定でコンピューターのローカル ID を使用します。
-
nMaxResolve
-
無視されます。 0 (0) に設定します。
-
dwTimeout
-
無視されます。 0 (0) に設定します。
-
dwLifetime
-
更新操作間の秒数を指定します。
-
enResolveCriteria
-
無視されます。 0 (0) に設定します。
-
dwFlags
-
0 (0) または PNRPINFO_HINTのいずれかである必要があります。 既定値は 0 です。 つまり、PNRP ID のサービスの場所の部分は 、saHint の IP アドレスを使用して構築されます。 それ以外の場合、サービスの場所は 、lpcsaBuffer メンバーの最初の IPv6 エントリの最初の IP アドレスを使用して作成されます。
-
saHint
-
ヒントの IPv6 アドレスを指定します。
-
enNameState
-
無視されます。 0 (0) に設定します。
ピア名の登録解除
次の一覧は、ピア名の登録解除に関する重要な情報を示しています。
- ピア名を登録解除できるのは、ピア名を登録したアプリケーションだけです。
- WSACleanup が呼び出されると、ピア名は自動的に登録解除されます。
- PNRP は、常にサービス名の登録全体を削除します。 個々のアドレスを削除することはできません。
- 名前の登録を解除する場合、 essOperation パラメーターの値は RNRSERVICE_DELETE である必要があります。
- PNRP では、 値RNRSERVICE_DEREGISTERはサポートされていません。
- dwControlFlags パラメーターは 0 (0) である必要があります。
名前の登録を解除する場合、lpqsRegInfo パラメーターが参照する LPWSAQUERYSET 構造体には、次の値が含まれている必要があります。
-
Dwsize
-
この構造体のサイズを指定します。
-
lpszServiceInstanceName
-
登録解除するピア名を指定します。
-
lpServiceClassID
-
SVCID_PNRPNAMEする必要があります。
-
lpVersion
-
無視されます。 NULL に設定 します。
-
lpszComment
-
無視されます。 NULL に設定 します。
-
dwNameSpace
-
NS_PNRPNAMEまたはNS_ALLである必要があります。
-
lpNSProviderID
-
NS_PROVIDER_PNRPNAMEまたは NULL である必要があります。
-
lpszContext
-
クラウド名、空の文字列、または NULL である必要があります。 この値が NULL または空の文字列の場合は、既定のクラウドである "Global" が使用されます。 それ以外の場合は、有効なクラウド名を指す必要があります。
-
dwNumberOfProtocols
-
無視されます。 0 (0) に設定します。
-
lpszQueryString
-
無視されます。 NULL に設定 します。
-
dwNumberOfCsAddrs
-
無視されます。 NULL に設定 します。
-
lpcsaBuffer
-
無視されます。 NULL に設定 します。
-
dwOutputFlags
-
無視されます。 0 (0) に設定します。
-
lpBlob
-
PNRPINFO 構造体を指す BLOB 構造体へのポインター。 lpBlob 構造体の lpszIdentity メンバーは、ピア名の登録に使用される ID の名前を識別します。 残りのメンバーは、名前の登録時に使用されるのと同じ値に設定する必要があります。
関連トピック
-
WSASetService