Üst Bilgi
Aşağıdaki üst bilgi, MIDL'nin geçerli sürümü tarafından oluşturulabilen üst bilgi stillerinden birini temsil eder. Kolaylık sağlamak için, üst bilgi alanlarının tam listesi burada sağlanır.
(–Oif üst bilgisi)
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>
Windows 2000 ile başlayan uzantılar: 32 bit için <8>, 64 bit için 12><)
extension_version<1>
INTERPRETER_OPT_FLAGS2<1>
ClientCorrHint<2>
ServerCorrHint<2>
NotifyIndex<2>
[ FloatDoubleMask<2> ]
extension_version<1>, uzantı bölümünün bayt cinsinden boyutunu sağlar. Bunun yapılması, geçerli NDR altyapısının, bölümün geçerli altyapının anlayacağından daha fazla alan içeren daha sonraki bir derleyici sürümünden gelmesi durumunda bile uzantı bölümünün üzerine doğru adım atabilmesini sağlar.
INTERPRETER_OPT_FLAGS2 aşağıdaki gibi tanımlanır:
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;
HasNewCorrDesc üyesi, derleyici tarafından oluşturulan biçim dizelerinde yeni bağıntı tanımlayıcılarının kullanılıp kullanılmadığını gösterir. Yeni bağıntı tanımlayıcısı, saldırı reddi işlevselliğiyle ilgilidir. ClientCorrCheck ve ServerCorrCheck üyeleri, yordamın belirtilen tarafta bağıntı denetimine ihtiyacı olduğunda ayarlanır.
HasNotify ve HasNotify2 bayrakları, yordamın sırasıyla [notify] ve [notify_flag] öznitelikleri tarafından tanımlanan bildirim özelliğini kullandığını gösterir.
ClientCorrHint üyesi istemci tarafında bir önbellek boyutu ipucudur ve ServerCorrHint sunucu tarafında bir ipucudur. Boyut sıfır olarak çıktığında varsayılan bir boyut kullanılmalıdır.
NotifyIndex öğesi, kullanılıyorsa bir bildirim yordamının dizinidir.
FloatDoubleMask öğesi, 64 bit Windows için kayan nokta bağımsız değişkeni sorununu giderir. Bu alan yalnızca 64 bit saplamalar için oluşturulur. Kayan nokta bağımsız değişkenlerini işlemek ve düzgün şekilde kaydetmek için sanal yığından/sanal yığına kayıt indiren/karşıya yükleyen derleme yordamları için maske gereklidir. Maske bağımsız değişken başına veya kayan nokta yazmaç başına 2 bitten oluşur. Kodlama aşağıdaki gibidir: En az önemli bitler ilk FP yazmaçlarına, sonraki 2 bit ikinci yazmaçlara karşılık gelir ve bu şekilde devam eder.
Not
Nesne yordamları için, bu işaretçinin ilk olması nedeniyle ilk bağımsız değişken ikinci yazmaçta biter. Her kayıt için bitlerin anlamı aşağıdaki tabloda gösterildiği gibidir.
Bit | Anlam |
---|---|
01 | Kayıt defterine bir float değeri yüklenmelidir. |
10 | Yazmaç için bir çift değer yüklenmelidir. |
00 ve 11, bitler için geçersiz değerlerdir.
Şu anda Intel Mimarisi 64 bit işlemcide sekiz FP yazmaç vardır, bu nedenle maske yalnızca 16b en düşük bit değerine sahip olabilir. Maske boyutu, değişmeden kalan C derleyicisi maskesine göre toplam 16 bit olarak ayarlanmıştır.
Performans için Üst Bilgi Akışı
Kodu basitleştirmek ve performansı geliştirmek için derleyici mümkün olduğunda sabit boyutlu bir üst bilgi oluşturmaya çalışır. Özellikle, zaman uyumsuz DCOM için aşağıdaki üst bilgi kullanılır:
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;