RpcNsBindingLookupNext 関数 (rpcnsi.h)

RpcNsBindingLookupNext 関数は、指定したインターフェイスと必要に応じてオブジェクトの互換性のあるバインド ハンドルの一覧を返します。

メモ この機能は、Windows Vista 以降のオペレーティング システムではサポートされていません。
 

構文

RPC_STATUS RpcNsBindingLookupNext(
  RPC_NS_HANDLE      LookupContext,
  RPC_BINDING_VECTOR **BindingVec
);

パラメーター

LookupContext

RpcNsBindingLookupBegin 関数から返される名前サービス ハンドル。

BindingVec

クライアントと互換性のあるサーバー バインド ハンドルのベクターへのポインターのアドレスを返します。

戻り値

意味
RPC_S_OK
呼び出しは成功しました。
RPC_S_NO_MORE_BINDINGS
これ以上のバインドはありません。
RPC_S_NAME_SERVICE_UNAVAILABLE
ネーム サービスは使用できません。
 
メモ 有効なエラー コードの一覧については、「 RPC 戻り値」を参照してください。
 

注釈

RpcNsBindingLookupNext 関数は、RpcNsBindingLookupBegin 関数の IfSpec パラメーターと ObjUuid パラメーターで指定されたインターフェイスとオブジェクト UUID を提供するサーバーのクライアント互換サーバー バインド ハンドルのベクターを返します。 (これを RpcNsBindingImportNext と比較すると、互換性のあるサーバー バインド ハンドルが 1 つ返されます)。

RpcNsBindingLookupNext 関数は、サーバーと直接ではなく、ネーム サービス データベースとのみ通信します。

Windows 2000 で有効な RPC 環境では、名前サービス データベースとして Active Directory が使用され、ランタイム環境で検索が実行される順序は次のとおりです。

  • ローカル キャッシュを検索します。
  • ローカル キャッシュにエントリが見つからない場合は、そのマシンの Active Directory を検索します。
  • ローカル コンピューターでエントリが見つからない場合は、ドメイン内の他のすべての Active Directory サービスにブロードキャスト要求を送信します。

    エントリが Active Directory に存在するが、エントリに関連付けられている情報がない場合、実行時環境ではこのブロードキャスト要求は発行されないことに注意してください。

連続する呼び出しでは、 RpcNsBindingLookupNext 関数はネーム サービス データベース エントリを走査し、各エントリからクライアント互換サーバー バインド ハンドルを収集します。

Microsoft Active Directory が名前サービス データベースの場合、 RpcNsBindingLookupNext は、指定されたエントリ名が null で、既定のエントリ (レジストリ内) が未定義または空の場合にのみ、データベースを走査します。 また、Active Directory では混合エントリが許可されないため、この関数は、グループ名やプロファイル名ではなく、サーバー エントリ名のみを検索します。

DCE Cell Directory Service (CDS) がネーム サービス データベースであり、検索が開始されるエントリにグループ名またはプロファイル名に加えてバインド ハンドルが含まれている場合、 RpcNsBindingLookupNext は グループまたはプロファイルを検索する前に EntryName からバインド ハンドルを返します。 つまり、この関数は、グループまたはプロファイルのメンバーを処理する前に、部分的に完全なベクターを返すことができます。

返される互換性のあるバインディング ハンドルには常にオブジェクト UUID が含まれています。値は RpcNsBindingImportBegin 関数の ObjUuid パラメーターに依存します。 null 以外のオブジェクト UUID が指定された場合、返されるバインディング ハンドルにはそのオブジェクト UUID が含まれます。 ただし、 null オブジェクト UUID または null 値が指定された場合、返されるオブジェクト UUID は次のような可能性があります。

  • サーバーがオブジェクト UUID をエクスポートしなかった場合、返されるバインディング ハンドルには nil オブジェクト UUID が含まれます。
  • サーバーが 1 つのオブジェクト UUID をエクスポートした場合、返されるバインディング ハンドルにはそのオブジェクト UUID が含まれます。
  • サーバーが複数のオブジェクト UUID をエクスポートした場合、返されるバインディング ハンドルにはオブジェクト UUID のいずれかが含まれます。 次のインポート操作では、返されたオブジェクト UUID が非決定論的な方法で選択されます。 その結果、1 つのサーバー エントリから互換性のあるバインド ハンドルごとに異なるオブジェクト UUID を返すことができます。
返されたサーバー バインド ハンドルのベクターから、クライアント アプリケーションは個々のバインド ハンドルを選択するための独自の条件を使用できます。または、アプリケーションは RpcNsBindingSelect 関数を 呼び出してバインド ハンドルを選択できます。 RpcBindingToStringBinding 関数と RpcStringBindingParse 関数は、独自の選択条件を作成するクライアントに役立ちます。

クライアント アプリケーションは、選択したバインド ハンドルを使用して、サーバーへのリモート プロシージャ呼び出しを試行できます。 クライアントがサーバーとの関係を確立できない場合は、ベクターから別のバインド ハンドルを選択できます。 ベクター内のすべてのバインド ハンドルが使用されると、クライアント アプリケーションは RpcNsBindingLookupNext をもう一度呼び出します。

クライアントが RpcNsBindingLookupNext を呼び出すたびに、この関数はバインド ハンドルの別のベクターを返します。 各ベクターで返されるバインド ハンドルは順序なしです。 この関数に対する複数の呼び出しから返されるベクトルも順序付けされません。

クライアントは RpcNsBindingInqEntryName 関数を 呼び出して、バインディングの元のネーム サービス データベース サーバーエントリ名を取得します。

検索が name-service データベースの末尾に達すると、 RpcNsBindingLookupNext はRPC_S_NO_MORE_BINDINGSの状態を返し、 BindingVecNULL を返します。

RpcNsBindingLookupNext 関数は、返された BindingVec パラメーターによって参照されるデータにストレージを割り当てます。 クライアント アプリケーションがベクターで終了したら、 RpcBindingVectorFree 関数を 呼び出してストレージの割り当てを解除する必要があります。 RpcNsBindingLookupNext の各呼び出しには、RpcBindingVectorFree への対応する呼び出しが必要です。

クライアントは 、RpcNsBindingLookupDone 関数を 呼び出して参照コンテキストを削除するか、アプリケーションで互換性のあるサーバーの新しい検索を開始する必要があります。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー rpcnsi.h (Rpc.h を含む)
Library Rpcns4.lib
[DLL] Rpcns4.dll

こちらもご覧ください

RpcBindingToStringBinding

RpcBindingVectorFree

RpcNsBindingInqEntryName

RpcNsBindingLookupBegin

RpcNsBindingLookupDone

RpcStringBindingParse