RpcNsBindingLookupNext 関数 (rpcnsi.h)
RpcNsBindingLookupNext 関数は、指定したインターフェイスと必要に応じてオブジェクトに対応するバインド ハンドルの一覧を返します。
構文
RPC_STATUS RpcNsBindingLookupNext(
RPC_NS_HANDLE LookupContext,
RPC_BINDING_VECTOR **BindingVec
);
パラメーター
LookupContext
RpcNsBindingLookupBegin 関数から返される名前サービス ハンドル。
BindingVec
クライアント互換サーバー バインド ハンドルのベクターへのポインターのアドレスを返します。
戻り値
値 | 意味 |
---|---|
|
呼び出しは成功しました。 |
|
これ以上のバインドはありません。 |
|
名前サービスを利用できません。 |
注釈
RpcNsBindingLookupNext 関数は、RpcNsBindingLookupBegin 関数の IfSpec パラメーターと ObjUuid パラメーターで指定されたインターフェイスとオブジェクト UUID を提供するサーバーのクライアント互換サーバー バインド ハンドルのベクターを返します。 (これを RpcNsBindingImportNext と比較すると、互換性のあるサーバー バインド ハンドルが 1 つ返されます)。
RpcNsBindingLookupNext 関数は、サーバーと直接ではなく、ネーム サービス データベースとのみ通信します。
Windows 2000 で有効な RPC 環境では、名前サービス データベースとして Active Directory が使用され、ランタイム環境が検索を実行する順序は次のようになります。
- ローカル キャッシュを検索します。
- ローカル キャッシュにエントリが見つからない場合は、そのマシンの Active Directory を検索します。
- ローカル コンピューターでエントリが見つからない場合は、ドメイン内の他のすべての Active Directory サービスにブロードキャスト要求を送信します。
エントリが Active Directory に存在するが、エントリに関連付けられている情報がない場合、実行時環境ではこのブロードキャスト要求は発行されないことに注意してください。
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 を返すことができます。
クライアント アプリケーションは、選択したバインド ハンドルを使用して、サーバーへのリモート プロシージャ 呼び出しを試行できます。 クライアントがサーバーとの関係を確立できない場合は、ベクターから別のバインド ハンドルを選択できます。 ベクター内のすべてのバインド ハンドルが使用されている場合、クライアント アプリケーションは 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 |