Top-Level dan Penunjuk Tersemat
Untuk memahami bagaimana pointer dan elemen data terkait dialokasikan di Microsoft RPC, Anda harus membedakan antara pointer tingkat atas dan pointer tersemat. Ini juga berguna untuk merujuk ke set semua pointer yang bukan penunjuk tingkat atas.
Pointer tingkat atas adalah yang ditentukan sebagai nama parameter dalam prototipe fungsi. Penunjuk tingkat atas dan referensinya selalu dialokasikan di server.
Penunjuk tersemat adalah pointer yang disematkan dalam struktur data seperti array, struktur, dan serikat. Ketika pointer yang disematkan hanya menulis output ke buffer dan null pada input, aplikasi server dapat mengubah nilainya menjadi non-null. Dalam hal ini, klien stub mengalokasikan memori baru untuk data ini.
Jika pointer yang disematkan tidak null pada klien sebelum panggilan, stub tidak mengalokasikan memori pada klien saat pengembalian. Sebagai gantinya, stub mencoba menulis memori yang terkait dengan pointer yang disematkan ke dalam memori yang ada pada klien yang terkait dengan pointer tersebut, menimpa data yang sudah ada.
Nota
Untuk data yang dibaca dari atau ditulis ke buffer, dan yang tidak menentukan ukuran buffer, panjang output harus kurang dari atau sama dengan panjang input. Pengecualian RPC dinaikkan ketika luapan terdeteksi. Untuk data string, panjang output ditentukan dengan memeriksa panjang string input. Oleh karena itu, string output tidak boleh melebihi panjang string input. Panduan praktik terbaik adalah menghindari hal ini dengan selalu menyertakan parameter yang ditentukan ukuran untuk menunjukkan ukuran buffer.
Pointer tulis-saja yang disematkan dibahas dalam Menggabungkan Atribut Pointer dan Directional.
Istilah penunjuk tingkat nontop mengacu pada semua penunjuk yang tidak ditentukan sebagai nama parameter dalam prototipe fungsi, termasuk penunjuk yang disematkan dan beberapa tingkat penunjuk berlapis.