Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Zoals eerder vermeld, bestaan -Oi en –Oif stijlparameterdescriptors.
De descriptors van de –Oi-parameter
Volledig geïnterpreteerde stubs vereisen aanvullende informatie voor elk van de parameters in een RPC-aanroep. De parameterbeschrijvingen van een procedure volgen direct na de beschrijving van de procedure.
parameterdescriptors
De indeling voor de beschrijving van een [in] of retourneer eenvoudige typeparameter is:
FC_IN_PARAM_BASETYPE
simple_type<1>
–of–
FC_RETURN_PARAM_BASETYPE
simple_type<1>
Waarbij simple_type<1> het FC-token is dat het eenvoudige type aangeeft. De codes zijn als volgt:
4e FC_IN_PARAM_BASETYPE
53 FC_RETURN_PARAM_BASETYPE
Overige -Oi-
parameterdescriptors
De indeling voor de beschrijving voor alle andere parametertypen is:
param_direction<1>
stack_size<1>
type_offset<2>
Wanneer het veld param_direction<1> voor elk van deze beschrijvingen een van deze beschrijvingen moet zijn die worden weergegeven in de volgende tabel.
| Hex | Vlag | Betekenis |
|---|---|---|
| 4d | FC_IN_PARAM | Een in-parameter. |
| 50 | FC_IN_OUT_PARAM | Een in/uit-parameter. |
| 51 | FC_OUT_PARAM | Een out-parameter. |
| 52 | FC_RETURN_PARAM | Een retourwaarde voor een procedure. |
| 4f | FC_IN_PARAM_NO_FREE_INST | Een in xmit/rep als parameter waarvoor geen vrijmaken wordt gemaakt. |
De stack_size<1> is de grootte van de parameter op de stack, uitgedrukt in het aantal gehele getallen dat de parameter op de stack in beslag neemt.
Notitie
De -Oi-modus wordt niet ondersteund op 64-bits platforms.
Het veld type_offset<2> is de verschuiving in de tekenreekstabel voor het typenotatie, waarmee de typedescriptor voor het argument wordt aangegeven.
De descriptors voor –Oif-parameters
Er zijn twee mogelijke indelingen voor een parameterbeschrijving, een voor basistypen, een voor alle andere typen.
Basistypen:
PARAM_ATTRIBUTES<2>
stack_offset<2>
type_format_char<1>
unused<1>
Ander:
PARAM_ATTRIBUTES<2>
stack_offset<2>
type_offset<2>
In beide stack_offset<2> geeft de verschuiving op de virtuele argumentstack in bytes aan. Voor basistypen wordt het argumenttype rechtstreeks gegeven door het notatieteken dat overeenkomt met het type. Voor andere typen geeft het veld type_offset<2> de verschuiving in de tekenreekstabel voor de typenotatie waarin de typedescriptor voor het argument zich bevindt.
Het parameterkenmerkveld wordt als volgt gedefinieerd:
typedef struct
{
unsigned short MustSize : 1; // 0x0001
unsigned short MustFree : 1; // 0x0002
unsigned short IsPipe : 1; // 0x0004
unsigned short IsIn : 1; // 0x0008
unsigned short IsOut : 1; // 0x0010
unsigned short IsReturn : 1; // 0x0020
unsigned short IsBasetype : 1; // 0x0040
unsigned short IsByValue : 1; // 0x0080
unsigned short IsSimpleRef : 1; // 0x0100
unsigned short IsDontCallFreeInst : 1; // 0x0200
unsigned short SaveForAsyncFinish : 1; // 0x0400
unsigned short Unused : 2;
unsigned short ServerAllocSize : 3; // 0xe000
} PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
- De MustSize bit is alleen ingesteld als de parameter moet worden aangepast.
- De MustFree bit is ingesteld als de server de NdrFree* routine van de parameter moet aanroepen.
- De IsSimpleRef- bit is ingesteld voor een parameter die een verwijzingsaanwijzer is naar iets anders dan een andere aanwijzer en waarvoor geen kenmerken zijn toegewezen. Voor een dergelijk type biedt het type_offset<> veld van de parameterbeschrijving, met uitzondering van een verwijzingswijzer naar een basistype, de verschuiving naar het type van de verwijzing; de verwijzingsaanwijzer wordt gewoon overgeslagen.
- De IsDontCallFreeInst bit is ingesteld voor bepaalde represent_as parameters waarvan de routines van het gratis exemplaar niet mogen worden aangeroepen.
- De ServerAllocSize bits zijn niet-nul als de parameter [], [in], of [in,] aanwijzer naar aanwijzer of aanwijzer naar enum16 is en wordt geïnitialiseerd op de stack van de server-interpreter, in plaats van een aanroep naar I_RpcAllocatete gebruiken. Als deze waarde niet nul is, wordt deze waarde vermenigvuldigd met 8 om het aantal bytes voor de parameter op te halen. Houd er rekening mee dat dit betekent dat ten minste 8 bytes altijd worden toegewezen aan een aanwijzer.
- De IsBasetype bit is ingesteld voor eenvoudige typen die worden marshaled door de hoofd--Oif interpreter-lus. Met name een eenvoudig type met een bereikkenmerk wordt niet gemarkeerd als basistype om het bereik routine marshaling via verzending af te dwingen met behulp van een FC_RANGE token.
- De IsByValue bit is ingesteld voor samengestelde typen die worden verzonden op waarde, maar is niet ingesteld voor eenvoudige typen, ongeacht of het argument een aanwijzer is. De samengestelde typen waarvoor het is ingesteld, zijn structuren, samenvoegingen, transmit_as, represent_as, wire_marshal en SAFEARRAY. Over het algemeen werd de bit geïntroduceerd voor het voordeel van de hoofd-interpreterlus in de -Oicf interpreter, om ervoor te zorgen dat de niet-simple-argumenten (ook wel samengestelde typeargumenten genoemd) correct worden gededucteerd. Deze bit is nooit gebruikt in eerdere versies van de interpreter.