Compartir a través de


Cadenas de formato RPC NDR

Motor NDR: Intérprete de 32 bits

En este documento se describen los descriptores de cadena de formato, a veces denominados MOP, para el motor de NDR de 32 bits. En esta sección se describen los cambios asociados a la evolución del intérprete –Oi a la capa del intérprete –Oif , así como adiciones relacionadas con canalizaciones y compatibilidad asincrónica.

En este documento se describe la tecnología actual del lenguaje de definición de interfaz de Microsoft (MIDL) desde la perspectiva del motor y el motor NDR actual.

Información general

El motor NDR es el motor de serialización de los componentes de llamada a procedimiento remoto (RPC) y DCOM. Controla todos los problemas relacionados con el código auxiliar de una llamada remota. Como proceso, la serialización de NDR se controla mediante el código C de códigos auxiliares generados por MIDL, un generador de tipos JIT MIDL o mediante códigos auxiliares generados por otras herramientas o escritos manualmente. A su vez, el motor NDR controla el tiempo de ejecución subyacente (DCOM o RPC) que se comunica con transportes específicos.

El objetivo original del diseño era proporcionar una herramienta para la serialización eficaz de datos arbitrarios, en función de la información proporcionada por el compilador MIDL. Las cadenas de formato descritas en este documento (y, de hecho, toda la información generada por el compilador para el consumo del motor NDR) siempre se han considerado una interfaz interna entre el compilador y el motor. Del mismo modo, las interfaces disponibles para el motor para controlar los problemas en tiempo de ejecución también son principalmente internas (algunas excepciones existen en el lado del tiempo de ejecución rpc y algunas interfaces DCOM usadas por el motor son externas).

Dos enfoques típicos de serialización siempre han sido tecnología insertada y controlada por datos (interpretado). MIDL admite los modificadores –Os y –Oi* en sus códigos auxiliares generados por C. Además, MIDL puede generar las bibliotecas de TLB usadas por el paquete oleautomation. En consecuencia, una perspectiva de los elementos internos del motor es que consta de dos partes.

El primero es un conjunto de rutinas que controlan el ajuste de tamaño, la serialización, etc., que corresponden a objetos de tipo de datos típicos, como una estructura o una matriz. Estas rutinas están ajustadas para el rendimiento; por ejemplo, normalmente intentan bloquear los datos de copia siempre que sea posible. Esta parte se conoce a menudo como motor NDR principal.

La segunda parte consta de un intérprete y sus piezas relacionadas. El intérprete usa rutinas del motor NDR principal, como si fuera de una biblioteca interna, para ejecutar una llamada remota con todos sus argumentos serializado y no etiquetado, según corresponda.

El motor NDR principal se usa de forma similar si se usa desde códigos auxiliares en línea o desde el intérprete. Todas las rutinas del motor principal dependen del estado pasado por una estructura de mensajes de código auxiliar. La estructura se configura correctamente mediante el código auxiliar en línea o el intérprete. A lo largo de los años, el motor principal se había utilizado en un contexto diferente; actualmente, el intérprete es realmente un conjunto de varios bucles de intérprete distintos. Están relacionados con los intérpretes antiguos y nuevos (–Oi frente a –Oif), así como con los bucles relacionados con la serialización de datos (selector), la compatibilidad asincrónica rpc y la compatibilidad asincrónica de DCOM (RPC y DCOM tienen diferentes modelos de programación asincrónica).

Más allá de la adición de nuevas características, un aspecto importante de la evolución del motor NDR es un cambio general en el enfoque de los intérpretes. La versión NDR1.1 comenzó como parte de un nuevo enfoque de MIDL 2.0 para serializar, con los códigos auxiliares en línea que se prefieren para las consideraciones de rendimiento. Con la versión más reciente de NDR, –Oif se ha convertido en el modo más usado del compilador, casi a la exclusión de códigos auxiliares insertados.

Los descriptores de cadena de formato del motor NDR rpc se describen con más detalle en los temas siguientes: