RpcServerUseProtseqEpExA 函数 (rpcdce.h)

RpcServerUseProtseqEpEx 函数告知 RPC 运行时库将指定的协议序列与指定终结点结合使用来接收远程过程调用。

语法

RPC_STATUS RpcServerUseProtseqEpExA(
  RPC_CSTR     Protseq,
  unsigned int MaxCalls,
  RPC_CSTR     Endpoint,
  void         *SecurityDescriptor,
  PRPC_POLICY  Policy
);

参数

Protseq

指向协议序列的字符串标识符的指针,用于向 RPC 运行时库注册。

MaxCalls

ncacn_ip_tcp 协议序列的积压工作队列长度。 所有其他协议序列都忽略此参数。 使用RPC_C_PROTSEQ_MAX_REQS_DEFAULT指定默认值。 请参阅“备注”。

Endpoint

指向用于为 Protseq指定的协议序列创建绑定时使用的终结点地址信息的指针。

SecurityDescriptor

指向为安全子系统提供的可选参数的指针。 仅用于 ncacn_npncalrpc 协议序列。 所有其他协议序列都忽略此参数。 不建议在终结点上使用安全描述符以使服务器安全。 此参数不会出现在此 API 的 DCE 规范中。

Policy

指向 RPC_POLICY 结构的指针,该结构包含设置特定于传输的属性的标志。 对于 ncadg_mq 传输,这些标志指定服务器进程接收队列的属性。 对于 ncacn_ip_tcpncadg_ip_udp 传输,这些标志限制动态端口的端口分配,并允许多宿主计算机有选择地绑定到网络接口卡。

只有在正在使用 ncacn_ip_tcpncadg_ip_udpncadg_mq 协议序列时,策略 字段中的标志设置才有效。 对于所有其他协议序列,RPC 运行时将忽略这些值。

注意,调用 RpcServerUseProtseqEpEx 函数时,将忽略与动态终结点关联的策略部分,因为端口是在终结点本身中指定的。
 

返回值

价值 意义
RPC_S_OK
调用成功。
RPC_S_PROTSEQ_NOT_SUPPORTED
此主机上不支持协议序列。
RPC_S_INVALID_RPC_PROTSEQ
协议序列无效。
RPC_S_INVALID_ENDPOINT_FORMAT
终结点格式无效。
RPC_S_OUT_OF_MEMORY
系统内存不足。
RPC_S_DUPLICATE_ENDPOINT
终结点是重复的。
RPC_S_INVALID_SECURITY_DESC
安全描述符无效。
 
注释 有关有效错误代码的列表,请参阅 RPC 返回值
 

言论

RpcServerUseProtseqEpEx 的参数和效果RpcServerUseProtseqEp。 区别在于 策略 参数,该参数允许在终结点上设置特定策略。 将 RPC_POLICY 结构的 NICFlags 字段设置为零会使此扩展函数等效于与与 ncacn_ip_tcpncadg_ip_udp 传输一起使用时的原始 rpcServerUseProtseqEp

服务器应用程序调用 RpcServerUseProtseqEpEx,以便向 RPC 运行时库注册一个协议序列。 对于每个协议序列注册,RpcServerUseProtseqEpEx 包括指定的终结点地址信息。

若要接收远程过程调用请求,服务器必须至少向 RPC 运行时库注册一个协议序列。 服务器应用程序可以多次调用此例程来注册其他协议序列和终结点。 对于服务器注册的每个协议序列,RPC 运行时库将创建一个或多个终结点,服务器通过该终结点接收远程过程调用请求。 RPC 运行时库为每个协议序列创建不同的终结点。 但是,进程中的每个接口都可以通过任何终结点进行访问。 有关详细信息,请参阅编写安全 RPC 客户端或服务器。

对于 MaxCalls,应用程序提供的值只是提示。 RPC 运行时或 Windows 套接字提供程序可能会重写该值。 例如,在 Windows XP 或 Windows 2000 Professional 上,该值限制为 5。 忽略大于 5 的值,而是使用 5。 在 Windows Server 2003 和 Windows 2000 Server 上,将遵循该值。

应用程序必须小心,才能在 maxCalls中传递合理的值。 服务器、高级服务器或 Datacenter Server 上的较大值可能会导致使用大量非分页池内存。 如果积压工作队列耗尽,则使用太小的值也是不利的,因为它可能会导致来自服务器的 TCP RST 满足 TCP SYN 数据包。 在确定 MaxCalls的正确值时,应用程序开发人员应平衡内存占用与可伸缩性要求。

将计算机配置为使用选择性绑定时,成功返回不保证服务器已为计算机上存在的所有网络接口创建终结点。 RPC 运行时可能无法侦听某些网络接口,具体取决于选择性绑定设置。 此外,如果接口尚未使用 DHCP 接收 IP 地址,则 RPC 服务器在分配给该接口之前不会侦听网络接口。 成功的返回意味着服务器正在至少侦听一个网络接口;可以通过对 RpcServerInqBindings 函数的调用获取可接收远程过程调用的绑定句柄的完整列表。

有关详细信息,请参阅 Server-Side 绑定字符串绑定为端口分配和选择性绑定配置注册表,以及 RPC 消息队列 和 MIDL 参考页 消息ncadg_mq

注意

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

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 rpcdce.h (包括 Rpc.h)
Rpcrt4.lib
DLL Rpcrt4.dll

另请参阅

RPC_POLICY

RpcServerUseAllProtseqsEx

RpcServerUseAllProtseqsIfEx

RpcServerUseProtseqEx

RpcServerUseProtseqIfEx

编写安全 RPC 客户端或服务器