Marshalling utenti
Il marshalling utente ha una stringa di formato simile 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>
I flag<1> byte sono costituiti dalla nibble del flag superiore e dalla nibble di allineamento inferiore.
I 2 bit superiori del flag vengono usati per descrivere se il tipo di filo è definito come puntatore univoco, puntatore di riferimento o nessun puntatore (non può essere un ptr). I manifesti seguenti sono stati definiti per impostare/ottenere i flag:
#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 */
L'allineamento della parola flag mantiene l'allineamento del filo del tipo trasmesso.
L'quadruple_index<2> è un indice della routine di callback per l'esecuzione del marshalling delle funzioni di marshalling dell'utente. Le posizioni di routine sono le seguenti: ridimensionamento, marshalling, annullamento delmarshaling e routine di liberamento.
Il user_type_memory_size<2> fornisce una dimensione per il tipo specifico dell'utente, inclusi i tipi sconosciuti.
Il transmitted_type_buffer_size<2> è zero quando la dimensione è variabile o la dimensione fissa effettiva. Si tratta di un'ottimizzazione che consente a MIDL di ignorare i callback durante il ridimensionamento del buffer e anche quando si libera.
Intervallo
Il controllo [intervallo] fornisce mezzi aggiuntivi per la convalida degli argomenti a livello NDR. Il descrittore [range] ha il formato seguente:
FC_RANGE, flags_type <1>
low value<4>
high value<4>
I flag accettano il nibble superiore e il tipo il nibble inferiore del secondo byte.The flags take the upper nibble and the type the lower nibble of the second byte. I valori bassi e alti dipendono dal tipo della variabile da controllare.
Le bandiere sono concepite come veicolo di espansione; il compilatore ha impostato il nibble su zero.