The <type>_UserUnmarshal function is a helper function for the wire_marshal and user_marshal attributes.The stubs call this function to unmarshal data on the client or server side. The function is defined as:
unsigned char __RPC_FAR * __RPC_USER <type>_UserUnmarshal(
unsigned long __RPC_FAR * pFlags,
unsigned char __RPC_FAR * pBuffer,
<type> __RPC_FAR * pMyObj);
The <type> in the function name means the userm-type specified in the wire_marshal or user_marshal type definition. This type may be nonremotable or even, when used with the user_marshal attribute, a type unknown to the MIDL compiler. The wire type name (the name of transmissible type) is not used in the function prototype. Note, however, that the wire type defines the wire layout for the data as specified by OSF DCE.
The pFlags argument is a pointer to an unsigned long flag field.The upper word of the flag contains NDR data representation flags as defined by OSF DCE for floating point, endianess, and character representations. The lower word contains a marshaling context flag as defined by the COM channel. The exact layout of the flags within the field is described in The type_UserSize Function.
The pBuffer argument is the current buffer pointer. This pointer may or may not be aligned on entry. Your <type>_UserUnmarshal function should align the buffer pointer appropriately, unmarshal the data, and return the new buffer position, which is the address of the first byte after the unmarshaled object.
The pMyObj argument is a pointer to a user-defined type object.
In a hetergeneous environment, the NDR engine performs any data conversion necessary prior to calling the <type>_UserUnmarshal function. Note that the NDR engine carries out this data conversion according to the wire-type definition supplied for this user data type. The flag indicates the data representation of the sender.
Marshaling Rules for user_marshal and wire_marshal, wire_marshal, user_marshal