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.
De volgende koptekst vertegenwoordigt een van de koptekststijlen die kunnen worden gegenereerd door de huidige versie van MIDL. Voor het gemak vindt u hier de volledige lijst met koptekstvelden.
(-Oif header)
handle_type<1>
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>
stack_size<2>
[explicit_handle_description<>]
constant_client_buffer_size<2>
constant_server_buffer_size<2>
INTERPRETER_OPT_FLAGS<1>
number_of_params<1>
Extensies vanaf Windows 2000: <8> voor 32-bits, <12> voor 64-bits)
extension_version<1>
INTERPRETER_OPT_FLAGS2<1>
ClientCorrHint<2>
ServerCorrHint<2>
NotifyIndex<2>
[ FloatDoubleMask<2> ]
De extension_version<1> biedt de grootte van de extensiesectie in bytes. Hierdoor kan de huidige NDR-engine de extensiesectie correct doorlopen, zelfs als de sectie afkomstig zou zijn van een latere compilerversie met meer velden dan de huidige engine begrijpt.
De INTERPRETER_OPT_FLAGS2 worden als volgt gedefinieerd:
typedef struct
{
unsigned char HasNewCorrDesc : 1; // 0x01
unsigned char ClientCorrCheck : 1; // 0x02
unsigned char ServerCorrCheck : 1; // 0x04
unsigned char HasNotify : 1; // 0x08
unsigned char HasNotify2 : 1; // 0x10
unsigned char Unused : 3;
} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
De HasNewCorrDesc lid geeft aan of nieuwe correlatiedescriptors worden gebruikt in de indelingstekenreeksen die door de compiler worden gegenereerd. De nieuwe correlatiedescriptor is gerelateerd aan de denial-of-attack-functionaliteit. De ClientCorrCheck en ServerCorrCheck leden worden ingesteld wanneer de routine de correlatiecontrole aan de aangegeven zijde nodig heeft.
De HasNotify en HasNotify2 vlaggen geven aan dat de routine respectievelijk de meldingsfunctie gebruikt zoals gedefinieerd door de [notify] en [notify_flag] kenmerken.
Het ClientCorrHint lid is een hint voor cachegrootte aan de clientzijde en ServerCorrHint- is een hint aan de serverzijde. Wanneer de grootte uitkomt als nul, moet er een standaardgrootte worden gebruikt.
Het element NotifyIndex is een index voor een meldingsroutine, als deze wordt gebruikt.
Met het element FloatDoubleMask wordt het probleem van een drijvendekommaargument voor 64-bits Windows opgelost. Dit veld wordt alleen gegenereerd voor 64-bits stubs. Het masker is nodig voor de assemblyroutines die registers van/naar de virtuele stack downloaden/uploaden om drijvende-kommaargumenten te verwerken en correct te registreren. Het masker bestaat uit 2 bits per argument of in plaats daarvan per drijvendekommaregister. De codering is als volgt: de minst significante bits komen overeen met het eerste FP-register, de volgende 2 bits komen overeen met het tweede register, enzovoort.
Notitie
Voor objectroutines eindigt het eerste argument in het tweede register omdat deze aanwijzer als eerste wordt opgegeven. Voor elk register wordt de betekenis van bits weergegeven in de volgende tabel.
| Bits | Betekenis |
|---|---|
| 01 | Er moet een floatwaarde in het register worden geladen. |
| 10 | Er moet een dubbele waarde in het register worden geladen. |
00 en 11 zijn ongeldige waarden voor de bits.
Er zijn momenteel acht FP-registers in een Intel Architecture 64-bits processor, waardoor het masker slechts 16b laagste bits kan hebben ingesteld. De maskergrootte is ingesteld op in totaal 16 bits op basis van het C-compilermasker dat ongewijzigd blijft.
Header Streamlining voor prestaties
Om code te vereenvoudigen en de prestaties te verbeteren, probeert de compiler waar mogelijk een header met een vaste grootte te genereren. In het bijzonder wordt de volgende header gebruikt voor asynchrone DCOM:
typedef struct _NDR_DCOM_OI2_PROC_HEADER
{
unsigned char HandleType; // The Oi header
INTERPRETER_FLAGS OldOiFlags; //
unsigned short RpcFlagsLow; //
unsigned short RpcFlagsHi; //
unsigned short ProcNum; //
unsigned short StackSize; //
// expl handle descr is never generated //
unsigned short ClientBufferSize; // The Oi2 header
unsigned short ServerBufferSize; //
INTERPRETER_OPT_FLAGS Oi2Flags; //
unsigned char NumberParams; //
} NDR_DCOM_OI2_PROC_HEADER, *PNDR_DCOM_OI2_PROC_HEADER;