RPC NDR 格式字串
NDR 引擎:32 位解釋器
本文件說明 32 位 NDR 引擎的格式字串描述元,有時稱為 MOP。 本節說明從 –Oi 解釋器到 –Oif 解釋器層,以及管道和異步支援的相關新增專案的相關變更。
本文件從引擎的觀點,說明目前Microsoft介面定義語言(MIDL)技術,以及目前的 NDR 引擎。
概述
NDR 引擎是遠端過程調用 (RPC) 和 DCOM 元件的封送處理引擎。 它會處理遠端呼叫的所有存根相關問題。 做為程式,NDR 封送處理是由 C 程式代碼由 MIDL 產生的存根、MIDL JIT 類型產生器,或由其他工具或手動撰寫的存根所驅動。 接著,NDR 引擎會驅動與特定傳輸通訊的基礎運行時間 (DCOM 或 RPC)。
設計的原始目標是根據 MIDL 編譯程式提供的資訊,為任意數據提供有效的封送處理工具。 本檔中所述的格式字串,以及編譯程式針對 NDR 引擎耗用量所產生的所有資訊,一律會被視為編譯程式與引擎之間的內部介面。 同樣地,引擎可用來處理運行時間問題的介面也大多是內部的(RPC 運行時間端有一些例外狀況,而引擎使用的一些 DCOM 介面是外部的)。
封送處理兩個典型的方法一直是內嵌和數據驅動(解譯)技術。 MIDL 透過其 –Os 和 –Oi* 參數在其 C 產生的存根中支援這兩者。 此外,MIDL 可以產生 oleautomation 套件所使用的 TLB 連結庫。 因此,引擎內部的一個觀點是它是由兩個部分所組成。
第一個例程是一組處理重設大小、封送處理等的例程,其對應至結構或陣列等一般數據類型物件。 這些例程會針對效能進行微調;例如,他們通常會儘可能嘗試封鎖複製數據。 此部分通常稱為核心 NDR 引擎。
第二個部分由解釋器及其相關部分組成。 解釋器會使用來自核心 NDR 引擎的例程,就如同來自內部連結庫一樣,以便視情況執行遠端呼叫,並將所有自變數封送處理和取消封送處理。
核心 NDR 引擎會以類似的方式使用,無論是從內嵌存根或解釋器使用。 所有核心引擎例程都取決於存根訊息結構傳入的狀態。 結構是由內嵌存根或解釋器適當地設定。 多年來,核心引擎一直在不同的背景下使用:目前解釋器實際上是數個相異解釋器迴圈的集合。 這些與舊與新(–Oi 與 –Oif)解釋器相關,以及與數據串行化(挑選)、RPC 異步支援和 DCOM 異步支援相關的迴圈(RPC 和 DCOM 有不同的異步程式設計模型)。
除了新增新功能之外,NDR 引擎演進的重要層面是解釋器方法的一般轉變。 NDR 1.1 版開始作為封送處理的新 MIDL 2.0 方法的一部分,內嵌存根優先用於效能考慮。 使用最新版本的 NDR 時,– Oif 已成為編譯程式最廣泛使用的模式,幾乎排除內嵌存根。
RPC NDR 引擎格式字串描述元會在下列主題中詳細說明: