过程标头描述符
标头在 NDR 引擎的生命周期内已多次扩展。 当前编译器仍会根据编译器的模式生成不同的标头。 但是,较新的标头是较旧标头的超集。
Old –Oi 标头
标头具有以下格式:
handle_type<1>
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>
stack_size<2>
[explicit_handle_description<>]
其中,<handle_type 1> 可以是下表中显示的值之一。
Hex | Handle |
---|---|
31 | FC_BIND_GENERIC |
32 | FC_BIND_PRIMITIVE |
33 | FC_AUTO_HANDLE |
34 | FC_CALLBACK_HANDLE |
0 | (显式句柄) |
如果handle_type<1> 字段为非零值,则过程使用所指示类型的隐式句柄。 有关详细信息,请参阅 处理 主题。 如果handle_type<1> 字段为零,则用于绑定的句柄是该过程的参数之一。
显式句柄可以是基元、泛型和上下文;最后一个具有以下 FC 令牌。
Hex | Handle |
---|---|
30 | FC_BIND_CONTEXT |
按照约定,DCOM 接口的句柄类型是FC_AUTO_HANDLE。
Oi_flags<1> 字段是以下标志的 8 位掩码。
Hex | 标志 | 含义 |
---|---|---|
01 | Oi_FULL_PTR_USED | 使用完整指针包。 |
02 | Oi_RPCSS_ALLOC_USED | 使用 RpcSs 内存包。 |
04 | Oi_OBJECT_PROC | 对象接口中的过程。 |
08 | Oi_HAS_RPCFLAGS | 该过程具有非零 Rpc 标志。 |
10 | Oi_* | 已重载。 |
20 | Oi_* | 已重载。 |
40 | Oi_USE_NEW_INIT_ROUTINES | 使用 Windows NT3.5 Beta2+ 初始化例程。 |
80 | 未使用。 |
重载以下标志。
Hex | 标志 | 含义 |
---|---|---|
10 | ENCODE_IS_USED | 仅用于腌料。 |
20 | DECODE_IS_USED | 仅用于腌料。 |
10 | Oi_IGNORE_OBJECT_EXCEPTION_HANDLING | 不再使用 (旧的 OLE) 。 |
20 | Oi_HAS_COMM_OR_FAULT | 仅在原始 RPC 中,[comm _, fault_status]。 |
20 | Oi_OBJ_USE_V2_INTERPRETER | 仅在 DCOM 中,使用 –Oif 解释器。 |
rpc_flags<4> 字段描述如何设置RPC_MESSAGE结构的 RpcFlags 字段。 仅当Oi_flags<1> 字段已设置Oi_HAD_RPCFLAGS时,此字段才存在。 如果此字段不存在,则远程过程的 RPC 标志为零。
注意
为了提高性能,异步解释器始终具有 rpc_flags<4> 字段。
proc_num<2> 字段提供过程的过程编号。
stack_size<2> 提供堆栈上所有参数的总大小,包括任何此指针和/或返回值。
本文档稍后将介绍explicit_handle_description<> 字段。 如果过程使用隐式句柄,则此字段不存在。