过程标头描述符

在 NDR 引擎的生命周期内,标头已多次扩展。 当前编译器仍根据编译器的模式生成不同的标头。 但是,较新的标头是较旧的标头的超集。

旧 –Oi 标头

标头具有以下格式:

handle_type<1> 
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>  
stack_size<2>
[explicit_handle_description<>]

其中handle_type<1> 可以是下表中显示的值之一。

十六进制 处理
31 FC_BIND_GENERIC
32 FC_BIND_PRIMITIVE
33 FC_AUTO_HANDLE
34 FC_CALLBACK_HANDLE
0 (显式句柄)

 

如果handle_type<1> 字段为非零,则该过程使用所指示类型的隐式句柄。 有关详细信息,请参阅 句柄 主题。 如果handle_type<1> 字段为零,则用于绑定的句柄是过程的参数之一。

显式句柄可以是基元、泛型和上下文;最后一个具有以下 FC 令牌。

十六进制 处理
30 FC_BIND_CONTEXT

 

按照约定,DCOM 接口的句柄类型FC_AUTO_HANDLE。

Oi_flags<1> 字段是以下标志的 8 位掩码。

十六进制 意义
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+ init 例程。
80 闲置。

 

以下标志重载。

十六进制 意义
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<>字段。 如果过程使用隐式句柄,则此字段不存在。