用户封送

用户封送处理具有类似于transmit_as的格式字符串:

FC_USER_MARSHAL
flags<1>
quadruple_index<2>
user_type_memory_size<2>
transmitted_type_buffer size<2>
offset_to_the_transmitted_type<2>

标志<1> 字节由上一个标志小号和下部对齐点组成。

标志的上限 2 位用于描述线路类型是定义为唯一指针、引用指针还是无指针, (它不能是 ptr) 。 已定义以下清单以设置/获取标志:

#define USER_MARSHAL_UNIQUE         0x80
#define USER_MARSHAL_REF            0x40
#define USER_MARSHAL_POINTER        0xc0  /* unique or ref */
#define USER_MARSHAL_IID            0x20  /* JIT compiler only */

标志字的对齐方式保持传输类型的线对齐方式。

quadruple_index<2> 是用户封送函数四倍的回调例程的索引。 常规位置如下所示:调整大小、封送、取消封送和释放例程。

user_type_memory_size<2> 提供用户特定类型(包括未知类型)的大小。

当大小变化时,transmitted_type_buffer_size<2> 为零,或实际固定大小。 这是一种优化,使 MIDL 能够在调整缓冲区大小时跳过回调,也可以在释放时跳过回调。

范围

[range] 检查为 NDR 层的参数验证提供了其他方法。 [range] 描述符的格式如下:

FC_RANGE,   flags_type <1>
low value<4>
high value<4>

标志采用第二个字节的上角和下一个字节的类型。 低值和高值取决于要检查的变量的类型。

国旗是一种扩张工具:编译器已将 nibble 设置为零。