用户封送
用户封送处理具有类似于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 设置为零。