过程标头描述符

标头在 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<> 字段。 如果过程使用隐式句柄,则此字段不存在。