为端口分配和选择性绑定配置注册表

从 Windows 2000 开始,应使用 Windows 资源工具包中名为 Rpccfg.exe 的实用工具来设置绑定。 有关详细信息,请参阅 Windows 资源工具包以获取相应的操作系统版本。

对于 Windows 2000 之前的 Windows 版本,下表中的注册表项为动态端口分配和绑定到多宿主计算机上的 NIC 指定系统默认值。 必须先创建这些密钥,然后指定相应的设置。

使用 RpcServerUseProtseqEx 函数会影响这些设置。 在管理端口分配时,开发人员应熟悉本部分中介绍的注册表设置和 RpcServerUseProtseqEx 函数。 下表后面提供了一个包含三个假设应用程序的示例,并说明了这些设置和 RpcServerUseProtseqEx 函数如何互操作。

如果缺少某个键或它包含无效值,则整个配置将被标记为无效,并且通过 ncacn_ip_tcpncadg_ip_udp 进行的所有 RpcServerUseProtseq* 调用都将失败。

注意

分配给进程的端口将保持分配状态,直到该进程死亡。 如果所有可用端口都在使用中,该函数将返回RPC_S_OUT_OF_RESOURCES。

 

端口密钥 数据类型 说明
HKEY_LOCAL_MACHINE   Software      Microsoft         Rpc            Internet               Ports
REG_MULTI_SZ 指定一组 IP 端口范围,这些范围由 Internet 上可用的所有端口或 Internet 上不可用的所有端口组成。 每个字符串表示一个端口或一组非独占端口 (,例如,1000-1050、1984) 。 如果任何条目在 0 到 65535 范围内,或者无法解释任何字符串,则 RPC 运行时会将整个配置视为无效。
HKEY_LOCAL_MACHINE   Software      Microsoft         Rpc            Internet               PortsInternetAvailable
REG_SZ Y 或 N (不区分大小写) 。 如果为 Y,则端口键中列出的端口是该计算机上所有可用的 Internet 端口。 如果为 N,则端口键中列出的端口是所有无法使用 Internet 的端口。
HKEY_LOCAL_MACHINE   Software      Microsoft         Rpc            Internet               UseInternetPorts
REG_SZ Y 或 N (不区分大小写) 。 指定系统默认策略。 如果为 Y,则使用默认值的进程将从 Internet 可用端口集分配端口,如上所述。 如果为 N,则使用默认值的进程将从仅限 Intranet 的端口集中分配端口。
HKEY_LOCAL_MACHINE   System      CurrentControlSet         Services            Rpc               Linkage                  Bind
REG_MULTI_SZ 列出默认绑定的所有 NIC 的设备名称 (例如\Device\AMDPCN1) 。 如果该密钥不存在,服务器将绑定到所有 NIC。 如果该密钥确实存在,服务器将绑定到密钥中指定的 NIC,除非 NICFlags 字段设置为 RPC_C_BIND_TO_ALL_NICS。 如果键具有 null (“”) 值,则配置将被标记为无效,并且通过 ncacn_ip_tcpncadg_ip_udpRpcServerUseProtseq* 的所有调用都将失败。

 

下表说明了三个示例应用程序如何受到上表中定义的设置的影响,以及如何使用 RpcServerUseProtseqEx 函数应用的设置也会受到影响。

在此示例中,考虑了三个假设的应用程序:

下表根据上表所述的注册表项中指定的值解释了这些设置的影响。 对于格式设置注意事项,分配了以下代码:

PIA = PortsInternetAvailable 键值

UIP = UseInternetPorts 键值

对于此示例,对于每个条目,Ports 键的值为 5000-5100。

应用程序 PIA UIP 结果
InternetApp Y Y 使用 5000 到 5100 之间的端口
LocalApp Y Y 使用 5000-5100 范围之外的端口
DefaultApp Y Y 使用 5000 到 5100 之间的端口
InternetApp Y N 使用 5000 到 5100 之间的端口
LocalApp Y N 使用 5000-5100 范围之外的端口
DefaultApp Y N 使用 5000-5100 范围之外的端口
InternetApp N Y 使用 5000-5100 范围之外的端口
LocalApp N Y 使用 5000 到 5100 之间的端口
DefaultApp N Y 使用 5000-5100 范围之外的端口
InternetApp N N 使用 5000-5100 范围之外的端口
LocalApp N N 使用 5000 到 5100 之间的端口
DefaultApp N N 使用 5000 到 5100 之间的端口

 

RPC_POLICY

RpcServerUseAllProtseqsEx

RpcServerUseAllProtseqsIfEx

RpcServerUseProtseqEx

RpcServerUseProtseqEpEx

RpcServerUseProtseqIfEx

ncacn_ip_tcp

ncadg_ip_udp