Marshal d’utilisateurs
Le marshal d’utilisateurs a une chaîne de format similaire à 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>
Les indicateurs<1> octet se composent du grbble d’indicateur supérieur et du nibble d’alignement inférieur.
Les 2 bits supérieurs du nibble d’indicateur sont utilisés pour décrire si le type de câble est défini comme pointeur unique, pointeur de référence ou aucun pointeur (il ne peut pas s’agir d’un ptr). Les manifestes suivants ont été définis pour définir/obtenir les indicateurs :
#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 */
Le nibble d’alignement du mot d’indicateur conserve l’alignement du fil du type transmis.
Le quadruple_index<2> est un index de la routine de rappel quadruple des fonctions de marshal utilisateur. Les positions de routine sont les suivantes : dimensionnement, marshaling, unmarshaling et freeing routine.
Le user_type_memory_size<2> fournit une taille pour le type spécifique à l’utilisateur, y compris les types inconnus.
Le transmitted_type_buffer_size<2> est soit zéro lorsque la taille varie, soit la taille fixe réelle. Il s’agit d’une optimisation qui permet à MIDL d’ignorer les rappels lors du dimensionnement de la mémoire tampon, ainsi que lors de la libération.
Plage
La vérification [plage] fournit des moyens supplémentaires pour la validation des arguments au niveau de la couche NDR. Le descripteur [plage] a le format suivant :
FC_RANGE, flags_type <1>
low value<4>
high value<4>
Les indicateurs prennent la nibble supérieure et le type la nibble inférieure du deuxième octet. Les valeurs basse et élevée dépendent du type de la variable à vérifier.
Les indicateurs sont destinés à être un véhicule d’expansion; le compilateur a défini la nibble sur zéro.