Chaînes de format RPC NDR
Moteur NDR : interpréteur 32 bits
Ce document décrit les descripteurs de chaîne de format, parfois appelés MOPs, pour le moteur 32 bits NDR. Cette section décrit les modifications associées à l’évolution de l’interpréteur -Oi vers la couche d’interpréteur -Oif , ainsi que les ajouts liés aux canaux et à la prise en charge asynchrone.
Ce document décrit la technologie ACTUELLE MIDL (Microsoft Interface Definition Language) du point de vue du moteur et du moteur NDR actuel.
Vue d’ensemble
Le moteur NDR est le moteur de marshaling des composants RPC (Remote Procedure Call) et DCOM. Il gère tous les problèmes liés au stub d’un appel distant. En tant que processus, le marshaling NDR est piloté par le code C à partir de stubs générés par MIDL, d’un générateur de type JIT MIDL ou par des stubs générés par d’autres outils ou écrits manuellement. À son tour, le moteur NDR pilote la durée d’exécution sous-jacente (DCOM ou RPC) qui communique avec des transports spécifiques.
L’objectif initial de la conception était de fournir un outil de marshaling efficace pour les données arbitraires, sur la base des informations fournies par le compilateur MIDL. Les chaînes de format décrites dans ce document, et en fait toutes les informations générées par le compilateur pour la consommation du moteur de remise de remise en état, ont toujours été considérées comme une interface interne entre le compilateur et le moteur. De même, les interfaces disponibles pour le moteur pour gérer les problèmes d’exécution sont principalement internes (certaines exceptions existent côté exécution RPC, et certaines interfaces DCOM utilisées par le moteur sont externes).
Deux approches typiques du marshaling ont toujours été des technologies inline et pilotées par les données (interprétées). MIDL prend en charge à la fois par le biais de ses commutateurs -Os et -Oi* dans ses stubs générés par C. En outre, MIDL peut générer les bibliothèques TLB utilisées par le package oleautomation. Par conséquent, l’une des perspectives de l’interne du moteur est qu’il se compose de deux parties.
La première est un ensemble de routines qui gèrent le dimensionnement, le marshaling, etc., correspondant à des objets de type de données typiques comme une structure ou un tableau. Ces routines sont affinées pour les performances ; par exemple, ils tentent généralement de bloquer-copier des données dans la mesure du possible. Cette partie est souvent appelée moteur de remise de remise de serveur principal.
La deuxième partie se compose d’un interprète et de ses pièces associées. L’interpréteur utilise des routines à partir du moteur de remise de serveur principal, comme s’il s’agit d’une bibliothèque interne, afin d’exécuter un appel distant avec tous ses arguments marshalés et non délimités, le cas échéant.
Le moteur NDR principal est utilisé de la même manière, qu’il soit utilisé à partir de stubs inline ou de l’interpréteur. Toutes les routines de moteur principaux dépendent de l’état transmis par une structure de message stub. La structure est configurée de manière appropriée par le stub inline ou par l’interpréteur. Au fil des ans, le moteur principal a été utilisé dans un contexte différent; actuellement, l’interpréteur est en fait un ensemble de plusieurs boucles d’interpréteur distinctes. Ceux-ci sont liés aux anciens et nouveaux interpréteurs (–Oi et -Oif), ainsi qu’aux boucles liées à la sérialisation des données (pickling), à la prise en charge asynchrone RPC et à la prise en charge asynchrone DCOM (RPC et DCOM ont différents modèles de programmation asynchrone).
Au-delà de l’ajout de nouvelles fonctionnalités, un aspect important de l’évolution du moteur NDR est un changement général dans l’approche des interpréteurs. NDR version1.1 a commencé dans le cadre d’une nouvelle approche MIDL 2.0 de marshaling, les stubs inline étant préférés pour les considérations de performances. Avec la version la plus récente de NDR, -Oif est devenu le mode le plus largement utilisé du compilateur, presque à l’exclusion des stubs inline.
Les descripteurs de chaîne de format RPC NDR Engine sont décrits plus en détail dans les rubriques suivantes :
- Chaînes de format
- Chaînes de format de procédure
- Descripteur d’en-tête de procédure
- Poignées
- En-tête
- Descripteurs de paramètres
- Chaînes de format de type