Fungsi type_UserMarshal
Fungsi>_UserMarshal jenis<adalah fungsi pembantu untuk atribut [ wire_marshal] dan [ user_marshal] . Stub memanggil fungsi ini ke data marshal di sisi klien atau server. Fungsi ini didefinisikan sebagai:
unsigned char __RPC_FAR * __RPC_USER <type>_UserMarshal(
unsigned long __RPC_FAR * pFlags,
unsigned char __RPC_FAR * pBuffer,
<type> __RPC_FAR * pMyObj);
Jenis <> dalam nama fungsi berarti jenis pengguna yang ditentukan dalam definisi jenis [wire_marshal] atau [user_marshal]. Jenis ini mungkin tidak dapat ditransmisikan atau bahkan—saat digunakan dengan atribut [user_marshal]—jenis yang tidak diketahui oleh pengkompilasi MIDL. Nama jenis kawat (nama jenis yang dapat ditransmisikan) tidak digunakan dalam prototipe fungsi. Namun, perhatikan bahwa jenis kawat mendefinisikan tata letak kawat untuk data seperti yang ditentukan oleh OSF DCE.
Parameter pFlags adalah penunjuk ke bidang bendera panjang yang tidak ditandatangani. Kata atas bendera berisi bendera representasi data NDR seperti yang didefinisikan oleh OSF DCE untuk representasi titik pecahan, urutan byte, dan karakter. Kata yang lebih rendah berisi bendera konteks marshaling seperti yang didefinisikan oleh saluran COM. Tata letak bendera yang tepat dalam bidang dijelaskan dalam Fungsi type_UserSize.
Parameter pBuffer adalah penunjuk buffer saat ini. Penunjuk ini mungkin atau mungkin tidak diratakan pada entri. Fungsi>_UserMarshal jenis<Anda harus menyelaraskan penunjuk buffer dengan tepat, membuat marshal data, dan mengembalikan posisi buffer baru, yang merupakan alamat byte pertama setelah objek marshal. Perlu diingat bahwa spesifikasi jenis kawat menentukan tata letak aktual data dalam buffer.
Parameter pMyObj adalah penunjuk ke objek jenis pengguna.
Nilai yang dikembalikan adalah posisi buffer baru, yang merupakan alamat byte pertama setelah objek yang belum dirusak.
Luapan buffer dapat terjadi ketika Anda salah menghitung ukuran data dan mencoba untuk marshal lebih banyak data dari yang diharapkan. Anda harus berhati-hati untuk menghindari situasi ini. Anda dapat memeriksanya dengan menggunakan penunjuk yang <jenis>_UserMarshal kembali. Jika tidak, Anda berisiko memiliki mesin NDR menaikkan pengecualian buffer-overflow nanti.
Pengecualian harus ditangkap dan ditangani secara lokal, pengecualian tidak boleh diizinkan untuk menyebarkan tumpukan panggilan.
Topik terkait
-
Aturan Marshaling untuk user_marshal dan wire_marshal