User-marshal

Marshal pengguna memiliki string format yang mirip dengan 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>

Bendera<1> byte terdiri dari nibble bendera atas dan nibble penyelarasan bawah.

2 bit atas nibble bendera digunakan untuk menggambarkan apakah jenis kawat didefinisikan sebagai penunjuk unik, penunjuk referensi, atau tanpa pointer (tidak boleh ptr). Manifes berikut telah ditentukan untuk mengatur/mendapatkan bendera:

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

Nibble perataan kata bendera menjaga keselarasan kawat dari jenis yang dikirimkan.

quadruple_index<2> adalah indeks quadruple rutin panggilan balik dari fungsi marshal pengguna. Posisi rutinnya adalah sebagai berikut: rutinitas ukuran, marshaling, unmarshaling, dan freeing.

user_type_memory_size<2> menyediakan ukuran untuk jenis spesifik pengguna, termasuk jenis yang tidak diketahui.

transmitted_type_buffer_size<2> adalah nol ketika ukurannya bervariasi, atau ukuran tetap aktual. Ini adalah pengoptimalan yang memungkinkan MIDL untuk melewati panggilan balik saat mengukur buffer, dan juga saat membebaskan.

Rentang

Pemeriksaan [rentang] menyediakan sarana tambahan untuk validasi argumen di lapisan NDR. Deskriptor [rentang] memiliki format berikut:

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

Bendera mengambil nibble atas dan jenis nibble bawah byte kedua. Nilai rendah dan tinggi tergantung pada jenis variabel yang akan diperiksa.

Bendera dimaksudkan sebagai kendaraan ekspansi; pengkompilasi telah mengatur nibble ke nol.