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 NDR de 32 bits. En esta sección se describen los cambios asociados a la evolución del intérprete de –Oi al intérprete de –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.

Visió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, el cálculo de referencias de NDR se basa en el código C de códigos auxiliares generados por MIDL, un generador de tipos JIT MIDL o por 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 ha sido proporcionar una herramienta para serializar 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. De forma similar, 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 en tiempo de ejecución de 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 tanto a través de sus –Os y –Oi* modificadores 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.

La primera 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 optimizadas para el rendimiento; por ejemplo, normalmente intentan bloquear los datos de copia siempre que sea posible. Esta parte se conoce a menudo como el 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, con el fin de ejecutar una llamada remota con todos sus argumentos serializado y no registrado, según corresponda.

El motor NDR principal se usa de forma similar si se usa desde códigos auxiliares insertados o desde el intérprete. Todas las rutinas del motor principal dependen del estado pasado por una estructura de mensajes auxiliares. La estructura se configura adecuadamente mediante el código auxiliar insertado 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. Estos están relacionados con los intérpretes antiguos y nuevos (–Oi frente a –Oif), así como bucles relacionados con la serialización de datos (selector), compatibilidad asincrónica de RPC y compatibilidad asincrónica con DCOM (RPC y DCOM tienen modelos de programación asincrónicos diferentes).

Además 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 MIDL 2.0 para serializar, con los códigos auxiliares insertados 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 RPC NDR se describen con más detalle en los temas siguientes: