Bagikan melalui


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 keselarasan bawah.

2 bit atas dari nibble bendera digunakan untuk menggambarkan apakah jenis kawat didefinisikan sebagai pointer unik, penunjuk referensi, atau tanpa pointer (tidak boleh ptr). Manifes berikut telah didefinisikan 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 */

Keselarasan kata bendera menjaga keselarasan kawat dari jenis yang ditransmisikan.

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

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.

Lingkup

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 yang lebih rendah dari byte kedua. Nilai rendah dan tinggi tergantung pada jenis variabel yang akan diperiksa.

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