Il s'agit de la commande pidlp qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
pidl - Un compilateur IDL écrit en Perl
SYNOPSIS
pidl --aide
pidl [--outputdir[=OUTNAME]] [--in Includedir DIR...] [--parse-idl-tree] [--dump-idl-tree]
[--dump-ndr-tree] [--header[=SORTIE]] [--python[=SORTIE]] [--ndr-parser[=SORTIE]]
[--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template]
[--ws-parser[=SORTIE]] [--diff] [--dump-idl] [--tdr-parser[=SORTIE]]
[--samba3-ndr-client[=SORTIE]] [--samba3-ndr-server[=SORTIE]] [--typelib=[SORTIE]]
[ .idl]...
DESCRIPTION
pidl est un compilateur IDL écrit en Perl qui vise à être quelque peu compatible avec le midl
compilateur. IDL est l'abréviation de "Interface Definition Language".
pidl peut générer des stubs pour le code serveur DCE/RPC, le code client DCE/RPC et Wireshark
dissecteurs pour le trafic DCE/RPC.
Les compilateurs IDL comme pidl prennent une description d'une interface comme entrée et l'utilisent pour
générer du code C (bien que la prise en charge d'autres langages puisse être ajoutée ultérieurement) qui puisse les utiliser
interfaces, jolies données d'impression envoyées à l'aide de ces interfaces, ou même générer Wireshark
dissecteurs qui peuvent analyser les données envoyées sur le fil par ces interfaces.
pidl prend les fichiers IDL dans le même format que celui utilisé par midl, le convertit en un fichier .pidl
(qui contient la représentation interne de pidl de l'interface) et peut ensuite générer
quelle que soit la sortie dont vous avez besoin. Les fichiers .pidl doivent être utilisés uniquement à des fins de débogage. Écrivez
vos définitions d'interface au format .idl.
Le but de pidl est d'implémenter un compilateur IDL qui peut être utilisé lors du développement du RPC
sous-système dans Samba (à des fins de marshalling/unmarshalling et de débogage).
OPTIONS
--Aidez-moi
Afficher la liste des options disponibles.
--version
Afficher la version pidl
--rép_sortie NOM DE SORTIE
Écrire les fichiers de sortie dans le répertoire spécifié. La valeur par défaut est le répertoire actuel.
--inclusir DIR
Ajoutez DIR au chemin de recherche utilisé par le préprocesseur. Cette option peut être spécifiée
plusieurs fois.
--parse-idl-tree
Lire l'arborescence interne à partir des fichiers d'entrée plutôt que de supposer qu'ils contiennent IDL.
--dump-idl
Générez un nouveau fichier IDL. Le fichier sera nommé OUTNAME.idl.
--entête
Générez un fichier d'en-tête C pour l'interface spécifiée. Le nom de fichier par défaut est OUTNAME.h.
--ndr-analyseur
Générez un fichier C et un en-tête C contenant des parseurs NDR. Le nom de fichier de l'analyseur
par défaut ndr_OUTNAME.c. Le nom de fichier d'en-tête sera le nom de fichier de l'analyseur avec le
extension changée de .c à .h.
--tdr-analyseur
Générez un fichier C et un en-tête C contenant des analyseurs TDR. Le nom de fichier de l'analyseur
par défaut tdr_OUTNAME.c. Le nom de fichier d'en-tête sera le nom de fichier de l'analyseur avec le
extension changée de .c à .h.
--typelib
Écrire les informations de type dans le fichier spécifié.
--serveur
Générez un passe-partout pour le serveur RPC qui implémente l'interface. Nom de fichier
par défaut, ndr_OUTNAME_s.c.
--modèle
Générez des stubs pour un serveur RPC qui implémente l'interface. La sortie sera écrite
à la sortie standard.
--ws-analyseur
Générez un dissecteur Wireshark (en C) et un fichier d'en-tête. Le nom de fichier du dissecteur
par défaut packet-dcerpc-OUTNAME.c tandis que le nom de fichier d'en-tête est par défaut
paquet-dcerpc-OUTNAME.h.
Pidl lira des données supplémentaires à partir d'un fichier de conformité Wireshark s'il est présent. Tel que
doit avoir le même emplacement que le fichier IDL mais avec l'extension cnf plutôt
que IDL. Voir Parse::Pidl::Wireshark::Conformance pour plus de détails sur le format de ce
fichier.
--diff
Analyser un fichier IDL, générer un nouveau fichier IDL basé sur les structures de données internes et
voir s'il y a des différences avec le fichier IDL d'origine. Utile pour le débogage
pidl.
--dump-idl-arbre
Dites à pidl de vider la représentation arborescente interne d'un fichier IDL sur le disque. Utile
pour le débogage de pidl.
--dump-ndr-tree
Dites à pidl de vider l'arbre d'informations NDR interne qu'il a généré à partir du fichier IDL vers
disque. Utile pour déboguer pidl.
--samba3-ndr-client
Générez des appels client pour Samba3, à placer dans rpc_client/. Au lieu d'appeler
au code dans rpc_parse/ de Samba3, cela appellera plutôt le code NDR de Samba4.
--samba3-ndr-serveur
Générez des appels de serveur pour Samba3, à placer dans rpc_server/. Au lieu d'appeler
au code dans rpc_parse/ de Samba3, cela appellera plutôt le code NDR de Samba4.
IDL SYNTAXE
Les fichiers IDL sont toujours prétraités à l'aide du préprocesseur C.
Pratiquement tout dans une interface (l'interface elle-même, les fonctions, les paramètres) peut
ont des attributs (ou des propriétés quel que soit le nom que vous leur donnez). Les attributs sont toujours préfixés
l'élément auquel ils s'appliquent et sont entourés de crochets ([]). Attributs multiples
sont séparés par des virgules ; les arguments des attributs sont spécifiés entre parenthèses.
Voir la section COMPATIBILITÉ pour la liste des attributs pris en charge par pidl.
Les commentaires de style C peuvent être utilisés.
CONFORME TABLEAUX
Un tableau conforme est un tableau qui se termine par [*] ou []. Les choses étranges à propos de conforme
les tableaux sont qu'ils ne peuvent apparaître que comme le dernier élément d'une structure (à moins qu'il n'y ait un
pointeur vers le tableau conforme, bien sûr) et la taille du tableau apparaît avant le
se structure sur le fil.
Donc, dans cet exemple :
typedef struct {
long abc ;
compte long;
long foo ;
[size_is(count)] long s[*] ;
} Structure1 ;
il apparaît comme ceci :
[size_is] [abc] [count] [foo] [s...]
le premier champ [size_is] est la taille d'allocation du tableau et se produit avant le tableau
éléments et même avant l'alignement de la structure.
Notez que taille_is() peut faire référence à une constante, mais cela ne change pas le fil
représentation. Cela ne fait pas du tableau un tableau fixe.
midl.exe écrirait le tableau ci-dessus sous la forme d'en-tête C suivant :
typedef struct {
long abc ;
compte long;
long foo ;
long s[1] ;
} Structure1 ;
pidl adopte une approche différente et l'écrit comme ceci :
typedef struct {
long abc ;
compte long;
long foo ;
long *s ;
} Structure1 ;
VARIANT TABLEAUX
Un tableau variable ressemble à ceci :
typedef struct {
long abc ;
compte long;
long foo ;
[size_is(count)] long *s ;
} Structure1 ;
Cela ressemblera à ceci sur le fil:
[abc] [compte] [foo] [PTR_s] [compte] [s...]
FIXE TABLEAUX
Un tableau fixe ressemble à ceci :
typedef struct {
long s[10] ;
} Structure1 ;
La représentation NDR ressemble à 10 longues déclarations distinctes. La taille du tableau est
pas codé sur le fil.
pidl prend également en charge les tableaux "inline", qui ne font pas partie de la norme IDL/NDR. Ceux-ci sont
déclaré comme ceci :
typedef struct {
uint32 foo ;
compte uint32 ;
barre uint32 ;
long s[compte];
} Structure1 ;
Cela ressemble à ceci :
[foo] [compte] [bar] [s...]
Les tableaux fixes sont une extension ajoutée pour prendre en charge certaines des étranges structures intégrées dans
descripteurs de sécurité et spoolss.
Cette section n'est en aucun cas complète. Voir la documentation OpenGroup et MSDN pour
Information additionnelle.
COMPATIBILITÉ avec MID
Manquant Caractéristiques in pidl
Les fonctionnalités MIDL suivantes ne sont pas (encore) implémentées dans pidl ou sont implémentées avec un
interface incompatible :
· Communication asynchrone
· Typelibs (fichiers .tlb)
· Prise en charge des datagrammes (ncadg_*)
Appareils attributs et mes déclarations
in, out, ref, length_is, switch_is, size_is, uuid, case, default, string, unique, ptr,
pointer_default, v1_enum, objet, helpstring, range, local, call_as, endpoint,
switch_type, progid, coclass, iid_is, represent_as, transmit_as, importer, inclure,
cpp_quote.
PIDL Autres ingrédients propriétés
public
La propriété [public] sur une structure ou une union est une extension pidl qui force le
les fonctions pull/push générées ne sont pas statiques. Cela vous permet de déclarer des types qui
peut être utilisé entre les modules. Si vous ne spécifiez pas [public] alors les fonctions pull/push
car les fonctions autres que celles de niveau supérieur sont déclarées statiques.
aucune impression
La propriété [noprint] est une extension pidl qui vous permet de spécifier que pidl doit
ne pas générer de fonction ndr_print_*() pour cette structure ou union. Ceci est utilisé lorsque
vous souhaitez définir votre propre fonction d'impression qui imprime une structure d'une manière plus agréable.
Un bon exemple est l'utilisation de [noprint] sur dom_sid, qui permet la jolie impression de
SID.
Plus-value
La propriété [value(expression)] est une extension pidl qui vous permet de spécifier le
valeur d'un champ lorsqu'il est mis sur le fil. Cela permet aux champs qui ont toujours un
valeur bien connue à remplir automatiquement, rendant ainsi l'API plus programmeuse
amical. L'expression peut être n'importe quelle expression C.
relatif
La propriété [relative] peut être fournie sur un pointeur. Lorsqu'il est utilisé, il déclare le
pointeur en tant que pointeur "relatif" de style spoolss, ce qui signifie qu'il apparaît sur le fil comme
un décalage au sein de la structure d'encapsulation actuelle. Cela ne fait pas partie de la normale
IDL/NDR, mais c'est une extension très utile car elle évite l'encodage manuel de nombreux
structures complexes.
sous-contexte (longueur)
Spécifie qu'une taille de longueur les octets doivent être lus, suivis d'un blob de cette taille,
qui sera analysé comme NDR.
sous-contexte() est désormais obsolète et ne doit pas être utilisé dans un nouveau code. Au lieu de cela, utilisez
représenter_as() or transmettre_as().
drapeau
Spécifiez les options booléennes, principalement utilisées pour les options NDR de bas niveau. Plusieurs options peuvent être
spécifié à l'aide du | personnage. Notez que les drapeaux sont hérités par les sous-structures !
non discriminant
La propriété [nodiscriminant] sur une union signifie que l'habituel uint16 discriminant
champ au début de l'union sur le fil est omis. Ce n'est normalement pas autorisé
dans IDL/NDR, mais est utilisé pour certaines structures spoolss.
jeu de caractères(nom)
Spécifiez que le tableau ou la chaîne utilise le jeu de caractères spécifié. Si cet attribut est
spécifié, pidl s'occupera de convertir les données de caractères de ce format en
le format hôte. Les valeurs couramment utilisées sont UCS2, DOS et UTF8.
Non pris en charge MID propriétés or déclarations
agrégable, appobject, async_uuid, liant, contrôle, defaultbind, defaultcollelem,
valeur par défaut, defaultvtable, dispinterface, displaybind, dual, entrée, first_is,
helpcontext, fichier d'aide, helpstringcontext, helpstringdll, caché, idl_module, idl_quote,
id, immediatebind, importlib, includelib, last_is, lcid, sous licence, max_is, module,
ms_union, no_injected_text, non consultable, non créable, non extensible, odl, oleautomation,
facultatif, pragma, propget, propputref, propput, en lecture seule, demandé, restreint, retval,
source, uidefault, usegetlasterror, vararg, vi_progid, wire_marshal.
EXEMPLES
# Génération d'un analyseur Wireshark
$ ./pidl --ws-parser -- atsvc.idl
# Génération d'un analyseur syntaxique et d'un en-tête TDR
$ ./pidl --tdr-parser --header -- regf.idl
# Génération d'un client et d'un serveur Samba3
$ ./pidl --samba3-ndr-client --samba3-ndr-server --dfs.idl
# Génération d'un analyseur, d'un client et d'un serveur Samba4 NDR
$ ./pidl --ndr-parser --ndr-client --ndr-server --samr.idl
Utiliser pidlp en ligne en utilisant les services onworks.net