String Format NDR RPC
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 interpreter –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.
Gambaran Umum
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 MIDL JIT, 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 awal dari desain ini adalah untuk menyediakan alat untuk marsekal yang efektif untuk data arbitrer, berdasarkan informasi yang diberikan 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 internal (beberapa pengecualian ada di sisi run-time RPC, dan beberapa antarmuka DCOM yang digunakan oleh mesin adalah eksternal).
Dua pendekatan khas untuk marshaling selalu sebaris dan teknologi berbasis data (ditafsirkan). MIDL mendukung baik melalui sakelar –Os dan –Oi* dalam stub yang dihasilkan C. Selain itu, MIDL dapat menghasilkan pustaka TLB yang digunakan oleh paket oleautomation. Oleh karena itu, satu perspektif internal mesin adalah terdiri dari dua bagian.
Yang pertama adalah serangkaian rutinitas yang menangani ukuran, marshaling, dan sebagainya, yang sesuai dengan objek tipe 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 terkait. Penerjemah menggunakan rutinitas dari mesin NDR inti, seolah-olah dari pustaka internal, untuk menjalankan panggilan jarak jauh dengan semua argumennya yang di-marshalasi dan tidak disembunyikan, sebagaimana mewajibkan.
Mesin NDR inti digunakan dengan cara yang sama baik digunakan dari rontokan 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 penerjemah yang berbeda. Ini terkait dengan interpreter lama dan baru (–Oi versus –Oif), serta 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 versi 1.1 dimulai sebagai bagian dari pendekatan MIDL 2.0 baru untuk marshaling, dengan stub sebaris lebih disukai untuk pertimbangan performa. Dengan versi NDR terbaru, –Oif telah menjadi mode pengkompilasi yang paling banyak digunakan, hampir hingga pengecualian stub sebaris.
Deskriptor string format MESIN NDR RPC dijelaskan secara lebih rinci dalam topik berikut:
- Format String
- String Format Prosedur
- Pendeskripsi Header Prosedur
- Handles
- The Header
- Deskriptor Parameter
- Jenis String Format