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 関数は name-service データベース エントリを走査し、各エントリからクライアント互換のサーバー バインド ハンドルを収集します。

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の状態を返し、 BindingVecの NULL を返します。

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