Bagikan melalui


Fungsi type_UserMarshal

Fungsi <type>_UserMarshal adalah fungsi pembantu untuk atribut [ wire_marshal] dan [ user_marshal]. Stub memanggil fungsi ini untuk marshal data 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 penggunam 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 menentukan 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 titik mengambang, urutan byte, dan representasi 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 type>_UserMarshal Anda< harus menyelaraskan penunjuk buffer dengan tepat, marshal data, dan mengembalikan posisi buffer baru, yang merupakan alamat byte pertama setelah objek marshaled. Perlu diingat bahwa spesifikasi jenis kawat menentukan tata letak data aktual 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 dialihkan.

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 jenis<> tersebut_UserMarshal mengembalikan. 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.

Aturan Marsekal untuk user_marshal dan wire_marshal

wire_marshal

user_marshal