Compartir a través de


Serialización del usuario

Las referencias de usuario tienen una cadena de formato similar a 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>

<Los marcadores 1> byte constan del nibble de la bandera superior y del níbble de alineación inferior.

Los 2 bits superiores de la marca nibble se usan para describir si el tipo de cable se define como un puntero único, puntero de referencia o ningún puntero (no puede ser un ptr). Se han definido los siguientes manifiestos para establecer o obtener las marcas:

#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 */

La alineación de la palabra de marca mantiene la alineación del cable del tipo transmitido.

El quadruple_index<2> es un índice de la rutina de devolución de llamada cuádruple de las funciones de serialización de usuario. Las posiciones rutinarias son las siguientes: ajuste de tamaño, serialización, desmarco y rutina de liberar.

El user_type_memory_size<2> proporciona un tamaño para el tipo específico del usuario, incluidos los tipos desconocidos.

El transmitted_type_buffer_size<2> es cero cuando el tamaño es variable o el tamaño fijo real. Se trata de una optimización que permite a MIDL omitir las devoluciones de llamada al cambiar el tamaño del búfer y también al liberar.

Intervalo

La comprobación [range] proporciona medios adicionales para la validación de argumentos en la capa NDR. El descriptor [range] tiene el siguiente formato:

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

Las marcas toman el nibble superior y escriben el nibble inferior del segundo byte. Los valores bajos y altos dependen del tipo de la variable que se va a comprobar.

Las banderas están pensadas como un vehículo de expansión; el compilador ha estado estableciendo el nibble en cero.