RpcServerRegisterIfEx 函数 (rpcdce.h)
RpcServerRegisterIfEx 函数向 RPC 运行时库注册接口。
语法
RPC_STATUS RpcServerRegisterIfEx(
RPC_IF_HANDLE IfSpec,
UUID *MgrTypeUuid,
RPC_MGR_EPV *MgrEpv,
unsigned int Flags,
unsigned int MaxCalls,
RPC_IF_CALLBACK_FN *IfCallback
);
参数
IfSpec
指示要注册的接口的 MIDL 生成的结构。
MgrTypeUuid
指向要与 MgrEpv 参数关联的 UUID 类型的指针。 指定 null 参数值 (或 nil UUID) 会将 IfSpec 注册到 nil 类型 UUID。
MgrEpv
管理器例程的入口点矢量 (EPV) 。 若要使用 MIDL 生成的默认 EPV,请指定 null 值。 有关详细信息,请参阅 RPC_MGR_EPV。
Flags
标志。 有关标志值的列表,请参阅 接口注册标志。
MaxCalls
服务器可以在自动侦听接口上接受的最大并发远程过程调用请求数。 MaxCalls 参数仅适用于自动侦听接口,在非自动侦听接口上将被忽略。 RPC 运行时库会尽最大努力确保服务器允许的并发调用请求数不会超过 MaxCalls 中指定的调用数。 实际数字可能更大,并且可能会因每个协议序列而异。
对其他接口的调用由 RpcServerListen 函数调用中指定的进程范围 MaxCalls 参数的值控制。
如果并发调用数不是问题,则通过使用RPC_C_LISTEN_MAX_CALLS_DEFAULT指定默认值,可以实现稍微更好的服务器端性能。 这样做可以缓解 RPC 运行时环境强制实施不必要的限制。
IfCallback
安全回调函数,或 NULL 表示无回调。 每个已注册的接口可以具有不同的回调函数。 有关更多详细信息,请参阅备注。
返回值
成功后返回RPC_S_OK。
注解
RpcServerRegisterIfEx 的参数和效果包括 RpcServerRegisterIf 的参数和效果。 区别在于能够注册自动侦听接口并指定安全回调函数。
服务器应用程序代码调用 RpcServerRegisterIfEx 来注册接口。 为了注册接口,服务器提供以下信息:
- 接口规范
接口规范是 MIDL 编译器生成的数据结构。
- 管理器类型 UUID 和管理器 EPV
管理器类型 UUID 和管理器 EPV 确定服务器从客户端接收远程过程调用请求时执行哪个管理器例程。 对于服务器提供的接口的每个实现,它必须注册一个单独的管理器 EPV。
请注意,指定非 nil 管理器类型 UUID 时,服务器还必须调用 RpcObjectSetType 来注册此非 nil 类型的对象。
通过指定安全回调函数,服务器应用程序可以按客户端限制对其接口的访问。 请记住,默认情况下,安全性是可选的;服务器运行时将调度不安全的调用,即使服务器已调用 RpcServerRegisterAuthInfo。 如果服务器希望仅接受经过身份验证的客户端,接口回调函数必须调用 RpcBindingInqAuthClient 或 RpcGetAuthorizationContextForClient 函数来检索安全级别,或者尝试使用 RpcImpersonateClient 模拟客户端。 它还可以在接口标志中指定RPC_IF_ALLOW_SECURE_ONLY标志。
当服务器应用程序为其接口指定安全回调函数 () 时,RPC 运行时会自动拒绝对该接口的未经身份验证的调用。 此外,运行时还会记录每个客户端已使用的接口。 当客户端向在当前通信会话期间未使用的接口发出 RPC 时,RPC 运行时库将调用接口的安全回调函数。 指定RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH标志将阻止自动拒绝未经身份验证的客户端。
有关回调函数的签名,请参阅 RPC_IF_CALLBACK_FN。
如果允许客户端在此接口中调用方法,则回调函数应返回RPC_S_OK。 任何其他返回代码都会导致客户端收到异常RPC_S_ACCESS_DENIED。
在某些情况下,RPC 运行时可能会为每个客户端-每个接口多次调用安全回调函数。 请确保回调函数可以处理这种可能性。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | rpcdce.h (包括 Rpc.h) |
Library | Rpcrt4.lib |
DLL | Rpcrt4.dll |