String Format RPC NDR
Mesin NDR: Interpreter 32-bit
Dokumen ini menjelaskan deskriptor string format, kadang-kadang disebut sebagai MOP, untuk mesin NDR 32-bit. Bagian ini menjelaskan perubahan yang terkait dengan evolusi dari penerjemah-Oi ke lapisan interpreter –Oif, serta penambahan yang terkait dengan pipa dan dukungan asinkron.
Dokumen ini menjelaskan teknologi Microsoft Interface Definition Language (MIDL) saat ini dari perspektif mesin, dan mesin NDR saat ini.
Ikhtisar
Mesin NDR adalah mesin marshaling komponen Remote Procedure Call (RPC) dan DCOM. Ini menangani semua masalah terkait stub dari panggilan jarak jauh. Sebagai proses, NDR marshaling didorong oleh kode C dari stub yang dihasilkan MIDL, generator jenis JIT MIDL, atau oleh stub yang dihasilkan oleh alat lain atau ditulis secara manual. Pada gilirannya, mesin NDR mendorong run time yang mendasarinya (DCOM atau RPC) yang berkomunikasi dengan transportasi tertentu.
Tujuan asli dari desain ini adalah untuk menyediakan alat untuk marshaling yang efektif untuk data arbitrer, berdasarkan informasi yang disediakan oleh kompilator MIDL. String format yang dijelaskan dalam dokumen ini—dan memang semua informasi yang dihasilkan oleh pengkompilasi untuk konsumsi mesin NDR—selalu dianggap sebagai antarmuka internal antara pengkompilasi dan mesin. Demikian pula, antarmuka yang tersedia untuk mesin untuk menangani masalah run-time juga sebagian besar bersifat internal (beberapa pengecualian ada di sisi run-time RPC, dan beberapa antarmuka DCOM yang digunakan oleh mesin berada di luar).
Dua pendekatan khas untuk marshaling selalu sebaris dan teknologi berbasis data (ditafsirkan). MIDL mendukung sakelar–Os dan–Oi* dalam stub yang dihasilkan C. Selain itu, MIDL dapat menghasilkan pustaka TLB yang digunakan oleh paket oleautomation. Oleh karena itu, salah satu perspektif internal mesin adalah terdiri dari dua bagian.
Yang pertama adalah serangkaian rutinitas yang menangani ukuran, marshaling, dan sebagainya, sesuai dengan objek jenis data umum seperti struktur atau array. Rutinitas ini disempurnakan untuk performa; misalnya, mereka biasanya mencoba memblokir data yang disalin sedapat mungkin. Bagian ini sering disebut sebagai mesin NDR inti.
Bagian kedua terdiri dari penerjemah dan potongan-potongan terkaitnya. Penerjemah menggunakan rutinitas dari mesin NDR inti, seolah-olah dari pustaka internal, untuk menjalankan panggilan jarak jauh dengan semua argumennya yang di-marshal dan tidak dimarshalasi, sebagaimana mewajibkan.
Mesin NDR inti digunakan dengan cara yang sama baik digunakan dari tinta sebaris atau dari penerjemah. Semua rutinitas mesin inti bergantung pada status yang diteruskan oleh struktur pesan stub. Struktur disiapkan dengan tepat oleh stub sebaris atau oleh penerjemah. Selama bertahun-tahun mesin inti telah digunakan dalam konteks yang berbeda; saat ini penerjemah sebenarnya adalah satu set dari beberapa perulangan interpreter yang berbeda. Ini terkait dengan interpreter lama dan baru (–Oi versus –Oif), serta untuk perulangan yang terkait dengan serialisasi data (pickling), dukungan asinkron RPC dan dukungan asinkron DCOM (RPC dan DCOM memiliki model pemrograman asinkron yang berbeda).
Di luar penambahan fitur baru, aspek penting dari evolusi mesin NDR adalah pergeseran umum dalam pendekatan kepada interpreter. NDR versi1.1 dimulai sebagai bagian dari pendekatan MIDL 2.0 baru untuk marshaling, dengan stub sebaris lebih disukai untuk pertimbangan performa. Dengan versi terbaru NDR, –Oif telah menjadi mode pengkompilasi yang paling banyak digunakan, hampir hingga pengecualian stub sebaris.
Deskriptor string format MESIN RPC NDR dijelaskan secara lebih rinci dalam topik berikut:
- Format String
- String Format Prosedur
- Pendeskripsi Header Prosedur
- Menangani
- Header
- Deskriptor Parameter
- String Format Jenis