rpcNsBindingExportA 函数 (rpcnsi.h)

RpcNsBindingExport 函数使用服务器的多个绑定句柄和多个对象建立名称服务数据库条目。

注意 Windows Vista 及更高版本的操作系统不支持此功能。
 

语法

RPC_STATUS RpcNsBindingExportA(
  unsigned long      EntryNameSyntax,
  RPC_CSTR           EntryName,
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVec,
  UUID_VECTOR        *ObjectUuidVec
);

parameters

EntryNameSyntax

EntryName 的语法。

若要使用注册表值项 HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\NameService\DefaultSyntax中指定的语法,请提供值 RPC_C_NS_SYNTAX_DEFAULT。

EntryName

指向绑定句柄和对象 UUID 导出到的条目名称的指针。 不能提供 null 或空字符串。 客户端和服务器必须使用相同的条目名称。

IfSpec

存根生成的数据结构,指定要导出的接口。 null 值指示没有绑定句柄可导出 (仅导出对象 UUID) 且忽略 BindingVec

BindingVec

指向要导出的服务器绑定的指针。 null 值指示没有绑定句柄可导出 (仅导出对象 UUID) 。

ObjectUuidVec

指向服务器提供的对象 UUID 矢量的指针。 服务器应用程序构造此向量。 null 值指示没有要导出的对象 UUID (只有绑定句柄要导出) 。

返回值

含义
RPC_S_OK
调用成功。
RPC_S_NOTHING_TO_EXPORT
没有什么可导出的。
RPC_S_INVALID_BINDING
绑定句柄无效。
RPC_S_WRONG_KIND_OF_BINDING
这是操作的错误绑定类型。
RPC_S_INVALID_NAME_SYNTAX
名称语法无效。
RPC_S_UNSUPPORTED_NAME_SYNTAX
不支持名称语法。
RPC_S_INCOMPLETE_NAME
名称不完整。
RPC_S_NO_NS_PRIVILEGE
没有名称服务操作的权限。
RPC_S_NAME_SERVICE_UNAVAILABLE
名称服务不可用。
 
注意 有关有效错误代码的列表,请参阅 RPC 返回值
 

注解

RpcNsBindingExport 函数允许服务器应用程序在名称服务数据库中公开提供接口供任何客户端应用程序使用。

在 Windows 2000 中,RPC 运行时环境使用 Active Directory 作为其名称服务数据库。 这意味着,经过授权的导出条目保留在名称服务中,即使在重新启动后也可见。 未经授权的导出不会保留。 有关授权和访问控制列表的详细信息,请参阅平台软件开发工具包 (SDK) 的“安全性”部分中的访问控制。

为了导出接口,服务器应用程序使用 接口调用 RpcNsBindingExport 例程,服务器绑定处理客户端可用于访问服务器。 服务器应用程序还会调用 RpcNsBindingExport 函数来公开提供对象 UUID (资源 () 它在名称服务数据库中提供(如果有)的资源) 。

服务器可以在对 RpcNsBindingExport 的单个调用中导出接口和对象,也可以单独导出它们。如果 EntryName 指定的 name-service 数据库条目不存在, RpcNsBindingExport 会尝试创建它。 在这种情况下,服务器应用程序必须具有创建条目的权限。除了调用 RpcNsBindingExport 外,调用 RpcServerUseAllProtseqsRpcServerUseProtseq 函数的服务器还必须通过调用 RpcEpRegisterRpcEpRegisterNoReplace 向本地终结点映射数据库注册。

服务器不需要将其任何接口导出到名称服务数据库。 当服务器不导出时,只有私下知道该服务器的绑定信息的客户端才能访问其接口。 例如,具有构造字符串绑定所需信息的客户端可以调用 RpcBindingFromStringBinding 来创建绑定句柄,以便对服务器进行远程过程调用。

在调用 RpcNsBindingExport 之前,服务器必须执行以下操作:

RpcServerInqBindings 函数返回的向量将成为 RpcNsBindingExportBinding 参数。 若要防止导出绑定,请将所选矢量元素设置为 null 值。

如果服务器多次导出到同一名称服务数据库条目,则当数据与服务器条目中已有的绑定信息不同时,对 RpcNsBindingExport 的第二次和后续调用会添加绑定信息和对象 UUID。 不会从条目中删除现有数据。

若要从名称服务数据库中删除绑定句柄和对象 UUID,服务器应用程序会调用 RpcNsBindingUnexport 函数。

服务器条目必须至少有一个绑定句柄才能存在。 因此,仅将 UUID 导出到不存在的条目不起作用,取消导出所有绑定句柄会删除该条目。

注意

rpcnsi.h 标头将 RpcNsBindingExport 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 rpcnsi.h (包括 Rpc.h)
Library Rpcns4.lib
DLL Rpcns4.dll

请参阅

RpcBindingFromStringBinding

RpcEpRegister

RpcEpRegisterNoReplace

RpcNsBindingUnexport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf