rpcServerRegisterIf3 函数 (rpcdce.h)
RpcServerRegisterIf3 函数向 RPC 运行时库注册接口。
语法
RPC_STATUS RpcServerRegisterIf3(
[in] RPC_IF_HANDLE IfSpec,
[in, optional] UUID *MgrTypeUuid,
[in, optional] RPC_MGR_EPV *MgrEpv,
[in] unsigned int Flags,
[in] unsigned int MaxCalls,
[in] unsigned int MaxRpcSize,
[in, optional] RPC_IF_CALLBACK_FN *IfCallback,
[in, optional] void *SecurityDescriptor
);
参数
[in] IfSpec
MIDL 生成的结构,指示要注册的接口。
[in, optional] MgrTypeUuid
指向要与 MgrEpv 参数关联的 UUID 类型的指针。 指定 null 参数值 (或 nil UUID) 将 IfSpec 注册到 nil 类型 UUID。
[in, optional] MgrEpv
管理器例程的入口点矢量 (EPV) 。 若要使用 MIDL 生成的默认 EPV,请指定 null 值。 有关详细信息,请参阅 RPC_MGR_EPV。
[in] Flags
标志。 有关标志值的列表,请参阅 接口注册标志。
[in] MaxCalls
服务器可以在 自动侦听 接口上接受的最大并发远程过程调用请求数。 MaxCalls 参数仅适用于自动侦听接口,在非自动侦听接口上将被忽略。 RPC 运行时库将尽最大努力确保服务器不允许的并发调用请求数不超过 MaxCalls 中指定的调用数。 实际数字可能更大,并且可能因每个协议序列而异。
其他接口上的调用受 RpcServerListen 函数调用中指定的进程范围 MaxCalls 参数的值控制。
如果不考虑并发调用数,则可以使用 RPC_C_LISTEN_MAX_CALLS_DEFAULT 指定默认值,从而略微提高服务器端性能。 这样做可以缓解 RPC 运行时环境强制实施不必要的限制。
[in] MaxRpcSize
传入数据块的最大大小(以字节为单位)。 此参数可用于帮助防止恶意拒绝服务攻击。 如果远程过程调用的数据块大于 MaxRpcSize,则 RPC 运行时库会拒绝该调用,并向客户端发送RPC_S_ACCESS_DENIED错误。 为此参数指定 (无符号 int) –1 的值将删除传入数据块的大小限制。 此参数对通过 ncalrpc 协议进行的调用没有影响。
[in, optional] IfCallback
安全回调函数,或 NULL 表示无回调。 每个已注册的接口可以具有不同的回调函数。 请参阅 RpcServerRegisterIf2 上的备注。
[in, optional] SecurityDescriptor
用于访问 RPC 接口的安全描述符。 每个已注册的接口可以具有不同的安全描述符。
返回值
成功后返回RPC_S_OK。
注解
RpcServerRegisterIf3 函数的参数和效果扩展了 RpcServerRegisterIf2 函数的参数和效果。 区别在于能够指定安全描述符来控制对已注册 RPC 接口的访问。
如果同时指定了 SecurityDescriptor 和 IfCallbackFn,则将首先检查 SecurityDescriptor 中的安全描述符,并在访问检查安全描述符传递后调用 IfCallbackFn 中的回调。
调用 RpcServerRegisterIf3 且 SecurityDescriptor 设置为 NULL,或调用 RpcServerRegisterIf、RpcServerRegisterIf2 或 RpcServerRegisterIfEx 注册接口时,将使用默认的安全描述符。 如果 RPC 服务器不是 AppContainer 进程,则默认安全描述符不允许从任何 AppContainer 进程访问接口。 如果 RPC 服务器是 AppContainer 进程,则默认安全描述符不允许从其他 AppContainer 进程中的任何进程访问接口。 默认安全描述符将允许从正常进程(包括低完整性进程)进行访问。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
目标平台 | Windows |
标头 | rpcdce.h (包括 Rpc.h) |
Library | Rpcrt4.lib |
DLL | Rpcrt4.dll |