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 函数中的 IfSpecObjUuid 参数指定的接口和对象 UUID。 (将此与 RpcNsBindingImportNext 进行比较,后者返回单个兼容的服务器绑定句柄。)

RpcNsBindingLookupNext 函数仅与名称服务数据库通信,而不直接与服务器通信。

在 Windows 2000 中,RPC 环境使用 Active Directory 作为其名称服务数据库,运行时环境执行搜索的顺序如下:

  • 搜索本地缓存。
  • 如果在本地缓存中找不到条目,请搜索该计算机的 Active Directory。
  • 如果在本地计算机上找不到条目,请将广播请求发送到域中的所有其他 Active Directory 服务。

    请注意,如果该条目存在于 Active Directory 中,但没有与条目关联的信息,则运行时环境不会发出此广播请求。

在连续调用时, RpcNsBindingLookupNext 函数会遍历名称服务数据库条目,从每个条目收集客户端兼容的服务器绑定句柄。

当 Microsoft Active Directory 是名称服务数据库时, RpcNsBindingLookupNext 仅当给定条目名称为 null 且注册表中 (的默认条目) 未定义或为空时,才会遍历数据库。 此外,由于 Active Directory 中不允许混合条目,函数仅搜索服务器条目名称,而不搜索组或配置文件名称。

当 DCE Cell Directory 服务 (CDS) 是名称服务数据库,并且搜索开始处的条目除了包含组或配置文件名称外还包含绑定句柄时, RpcNsBindingLookupNext 会在搜索组或配置文件之前从 EntryName 返回绑定句柄。 这意味着函数可以在处理组或配置文件的成员之前返回部分完整的向量。

返回的兼容绑定句柄始终包含对象 UUID,其值取决于 RpcNsBindingImportBegin 函数中的 ObjUuid 参数。 如果指定了非 对象 UUID,则返回的绑定句柄将包含该对象 UUID。 但是,如果指定了 对象 UUID 或 null 值,则返回的对象 UUID 是以下可能的结果:

  • 如果服务器未导出任何对象 UUID,则返回的绑定句柄包含 nil 对象 UUID。
  • 如果服务器导出了一个对象 UUID,则返回的绑定句柄包含该对象 UUID。
  • 如果服务器导出了多个对象 UUID,则返回的绑定句柄包含其中一个对象 UUID。 import-next 操作以非确定性方式选择返回的对象 UUID。 因此,可以从单个服务器条目为每个兼容的绑定句柄返回不同的对象 UUID。
从服务器绑定句柄返回的向量中,客户端应用程序可以使用自己的条件来选择单个绑定句柄,或者应用程序可以调用 RpcNsBindingSelect 函数来选择绑定句柄。 RpcBindingToStringBindingRpcStringBindingParse 函数将帮助客户端创建自己的选择条件。

客户端应用程序可以使用所选绑定句柄尝试对服务器进行远程过程调用。 如果客户端无法与服务器建立关系,则可以从向量中选择另一个绑定句柄。 使用矢量中的所有绑定句柄后,客户端应用程序将再次调用 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