Поделиться через


Строки формата NDR RPC

Подсистема NDR: 32-разрядный интерпретатор

В этом документе описываются дескрипторы строк формата, которые иногда называются MOPS для 32-разрядного обработчика NDR. В этом разделе описываются изменения, связанные с эволюцией от интерпретатора –Oi на уровень интерпретатора –Oif, а также дополнения, связанные с трубами и асинхронной поддержкой.

В этом документе описывается текущая технология языка определения интерфейса Майкрософт (MIDL) с точки зрения подсистемы и текущего ядра NDR.

Обзор

Подсистема NDR — это механизм маршалинга компонентов удаленного вызова процедур (RPC) и DCOM. Он обрабатывает все проблемы, связанные с заглушки удаленного вызова. В процессе маршалинг NDR управляется кодом C из заглушки, созданных MIDL, генератором JIT-типа MIDL или заглушками, созданными другими инструментами или написанными вручную. В свою очередь подсистема NDR управляет базовым временем выполнения (DCOM или RPC), который взаимодействует с определенными транспортами.

Первоначальной целью проектирования было предоставление средства эффективного маршалинга произвольных данных на основе информации, предоставленной компилятором MIDL. Строки формата, описанные в этом документе, и действительно все сведения, созданные компилятором для потребления подсистемы NDR, всегда считались внутренним интерфейсом между компилятором и подсистемой. Аналогичным образом интерфейсы, доступные подсистеме для обработки проблем во время выполнения, также являются внутренними (некоторые исключения существуют на стороне времени выполнения RPC, а некоторые интерфейсы DCOM, используемые подсистемой, являются внешними).

Два типичных подхода к маршалингу всегда были встроенными и управляемыми данными (интерпретируемыми) технологиями. MIDL поддерживает как -Os, так и –Oi* коммутаторы в заглушки, созданные C. Кроме того, MIDL может создавать библиотеки TLB, используемые пакетом oleautomation. Соответственно, одна перспектива внутренних элементов двигателя заключается в том, что она состоит из двух частей.

Первым является набор подпрограмм, обрабатывающих изменение размера, маршалинг и т. д., соответствующий типичным объектам типа данных, таким как структура или массив. Эти подпрограммы настраиваются на производительность; Например, обычно они пытаются блокировать копирование данных по возможности. Эта часть часто называется основной подсистемой NDR.

Вторая часть состоит из интерпретатора и его связанных частей. Интерпретатор использует подпрограммы из ядра подсистемы NDR, как если бы из внутренней библиотеки, для выполнения удаленного вызова со всеми его аргументами маршалированы и немаршалированы, как это необходимо.

Ядро NDR используется аналогичным образом, независимо от того, используется ли встроенные заглушки или от интерпретатора. Все подпрограммы ядра зависят от состояния, переданного структурой сообщений заглушки. Структура настраивается соответствующим образом с помощью встроенной заглушки или интерпретатора. На протяжении многих лет основной механизм использовался в другом контексте; В настоящее время интерпретатор — это набор нескольких отдельных циклов интерпретаторов. Они связаны со старыми и новыми интерпретаторами (–Oi и –Oif) интерпретаторов, а также циклами, связанными с сериализацией данных (выбор), поддержкой Асинхронного кода RPC и Асинхронной поддержкой DCOM (RPC и DCOM).

Помимо добавления новых функций, важным аспектом эволюции подсистемы NDR является общий сдвиг в подходе к интерпретаторам. NDR версии 1.1 начался в рамках нового подхода MIDL 2.0 к маршалингу, при этом встроенные заглушки предпочтительнее для соображений производительности. С самой последней версией NDR –Oif стал наиболее широко используемым режимом компилятора, почти до исключения встроенных заглушки.

Дескрипторы формата ядра RPC NDR подробно описаны в следующих разделах: