Aracılığıyla paylaş


Bağıntı Tanımlayıcıları

Bağıntı tanımlayıcısı, başka bir bağımsız değişkenle ilgili bir bağımsız değişkeni temel alan bir ifadeyi tanımlayan bir biçim dizesidir. [size_is()], [length_is()], [switch_is()] ve [iid_is()] gibi özniteliklerle ilgili semantiği işlemek için bir bağıntı tanımlayıcısı gereklidir. Bağıntı tanımlayıcıları diziler, boyutlandırılmış işaretçiler, birleşimler ve arabirim işaretçileriyle kullanılır. Nihai ifade değeri sırasıyla bir boyut, uzunluk, birleşim ayrımcı veya IID işaretçisi olabilir. Biçim dizeleri açısından, bağıntı tanımlayıcıları diziler, birleşimler ve arabirim işaretçileriyle kullanılır. Boyutlu bir işaretçi, biçim dizelerinde bir dizi işaretçisi olarak açıklanmıştır.

Temel ifade hesaplamaları yapan iki yordam vardır: NdrpComputeConformance boyutlar, anahtarlar ve IID* için kullanılırken, NdrpComputeVariance uzunluklar için kullanılır. Saldırı reddi işlevselliği için bağıntı değeri doğrulaması gerçekleştirmek için tek bir yordam da vardır.

Bağıntı tanımlayıcıları yalnızca çok sınırlı ifadeleri destekleyecek şekilde tasarlanmıştır. Karmaşık durumlarda, derleyici gerektiğinde altyapı tarafından çağrılacak bir ifade değerlendirme yordamı oluşturur.

Bağıntı tanımlayıcısı aşağıdaki biçime sahiptir:

correlation_type<1>
correlation_operator<1>
offset<2>
[robust_flags<2>]

1> correlation_type<bağıntı tanımlayıcısı iki nibble oluşur: üst 4 bit ifadenin nerede bulunabileceğini, alt 4 bit ise ifade değerinin türünü açıklar.

Üst nibble şu beş değerden birine sahip olabilir:

00  FC_NORMAL_CONFORMANCE
10  FC_POINTER_CONFORMANCE
20  FC_TOP_LEVEL_CONFORMANCE
80  FC_TOP_LEVEL_MULTID_CONFORMANCE
40  FC_CONSTANT_CONFORMANCE

FC_NORMAL_CONFORMANCE

Bir yapının bir alanında açıklanan gibi normal bir uyumluluk durumu.

FC_POINTER_CONFORMANCE

Bir yapıdaki alanlar olan öznitelikli işaretçiler için (size_is(), length_is()). Bu, temel bellek işaretçisinin ayarlanmasını etkiler.

FC_TOP_LEVEL_CONFORMANCE

Başka bir parametre tarafından açıklanan üst düzey uyumluluk için.

FC_TOP_LEVEL_MULTID_CONFORMANCE

Başka bir parametre tarafından açıklanan çok boyutlu bir dizinin üst düzey uyumluluğu için.

Not

Çok boyutlu diziler ve işaretçiler –Oicfbir anahtar tetikler.

 

FC_CONSTANT_CONFORMANCE

Sabit bir değer için. Derleyici, kullanıcı tarafından sağlanan sabit ifadeden değeri önceden hesaplar. Bu durumda, uyumluluk açıklamasındaki sonraki 3 bayt, uyumluluk boyutunu açıklayan uzun bir sürenin daha düşük 3 baytını içerir. Başka hesaplama gerekmez.

Düşük nibble bellekten ayıklanması gereken değerin türünü verir:

FC_LONG | FC_ULONG | 
FC_SHORT | FC_USHORT | 
FC_SMALL | FC_USMALL | 
FC_HYPER

Not

64 bit ifadeler desteklenmez. FC_HYPER yalnızca IID* işaretçi değerini ayıklamak için 64 bit platformlarda iid_is() için kullanılır.

Derleyici, aşağıdaki durumlar için nibble türünü sıfır olarak ayarlar: yukarıda bahsedilen sabit ifade ve değerlendirme ifadesi yordamının çağrılması gerektiğinde(örneğin, FC_CONSTANT_CONFORMANCE ve FC_CALLBACK kullanıldığında).

 

size_is_op<1> alanı, uyumluluk değişkenine aşağıdaki işlemlerden birinin uygulanmasını sağlar:

FC_DEREFERENCE | 
FC_DIV_2 | FC_MULT_2 | FC_SUB_1 | FC_ADD_1 | 
FC_CALLBACK

FC_DEREFERENCE sabiti, [size_is(*pL)]gibi bir nokta olan bağıntı için kullanılır. Aritmetik işleçler yalnızca belirtilen sabiti kullanır. FC_CALLBACK sabiti, ifade değerlendirme yordamının çağrılması gerektiğini gösterir.

Uzaklık<2> alanı genellikle ifade bağımsız değişkenine göreli bir bellek uzaklığıdır. Ayrıca bir ifade değerlendirme-rutin dizini de olabilir. Bu belgede daha önce belirtildiği gibi, sabit ifadeler için gerçek, son ifade değerinin bir parçasıdır.

Uzaklık<2> alanının bellek uzaklığı olarak yorumlanması, ifadenin karmaşıklığı, ifade değişkeninin konumu ve dizi söz konusu olduğunda dizinin gerçekten öznitelikli bir işaretçi olup olmadığına bağlıdır.

Dizi öznitelikli bir işaretçiyse ve uyumluluk değişkeni bir yapıdaki bir alansa, uzaklık alanı yapının başından uyumluluk açıklayan alana uzaklığı içerir. Dizi öznitelikli bir işaretçi değilse ve uyumluluk değişkeni bir yapıdaki bir alansa, uzaklık alanı yapının uygunsuz bölümünün sonundan uyumluluğu açıklayan alana uzaklığı içerir. Genellikle, uyumlu dizi yapının sonundadır.

Üst düzey uyumluluk için, uzaklık alanı saplamanın ilk parametresinin yığındaki konumundan uyumluluğu açıklayan parametreye uzaklığı içerir. Bu, işletim sistemi modunda kullanılmaz. Uzaklık alanının yorumlanmasında başka özel durumlar da vardır; bu tür özel durumlar, bu türlerin açıklamasında açıklanmıştır.

FC_CALLBACK ile birlikte uzaklık<2> kullanıldığında, derleyici tarafından oluşturulan ifade değerlendirme yordamı tablosunda bir dizin içerir. Saplama iletisi değerlendirme yordamına geçirilir ve bu işlem uyumluluk değerini hesaplar ve saplama iletisinin MaxCount alanına atar.

Windows 2000 için robust_flags<2> alanı, saldırı engelleme özelliği gibi /sağlamdesteklemek üzere eklenmiştir. İlk baytta aşağıdaki bayraklar tanımlanır:

typedef  struct  _NDR_CORRELATION_FLAGS
  {
  unsigned char   Early     : 1;
  unsigned char   Split     : 1;
  unsigned char   IsIidIs   : 1;
  unsigned char   DontCheck : 1;
  unsigned char   Unused    : 4;
  } NDR_CORRELATION_FLAGS;

Erken bayrağı erken ve geç bağıntıyı gösterir. Erken bağıntı, ifade bağımsız değişkeninin açıklanan bağımsız değişkenin önüne geçmesidir; örneğin, boyut bağımsız değişkeni, boyutlandırılmış bir işaretçi bağımsız değişkenden öncedir. Geç bağıntı, ifade bağımsız değişkeninin ilgili bağımsız değişkenden sonra gelmesidir. Altyapı erken bağıntı değerlerinin doğrulamasını hemen gerçekleştirir, özetleme tamamlandıktan sonra geç bağıntı değerleri denetlenecek şekilde depolanır.

Bölme bayrağı, [in] ve [out] bağımsız değişkenleri arasında zaman uyumsuz bir bölme olduğunu gösterir. Örneğin, boyut bağımsız değişkeni [in] olabilirken, boyutlandırılmış işaretçi [out] olabilir. DCOM zaman uyumsuz bağlamında, bu bağımsız değişkenler farklı yığınlarda olduğu için altyapının bunu bilmesi gerekir.

IsIidIs bayrağı bir iid_is() bağıntıyı gösterir. NdrComputeConformance yordamı, IID'ye bir ifade değeri olarak işaretçi almak için kandırılır, ancak doğrulama yordamı bu tür değerleri karşılaştıramaz (bunlar işaretçi olur) ve bu nedenle bayrak gerçek IID'lerin karşılaştırılması gerektiğini gösterir.

Varyans Açıklaması ve Diğer Dizi Öznitelikleri

Varyans açıklaması alan biçimi, uyumluluk açıklaması alanıyla aynıdır. Aradaki fark, NDR altyapısı tarafından geçici değişken olarak farklı bir saplama iletisi alanının kullanılmasıdır. Varyans açıklaması söz konusu olduğunda, değerlendirilen uzunluk ve buna karşılık gelen alan ActualLength olarak adlandırılır.

Varyans ile, başlangıç uzaklığı genellikle sıfırdır ve altyapı buna göre ayarlanır. first_is() özniteliği uyumlu bir değişken diziye uygulanırsa, ifade değerlendirme yordamına geri çağırma zorlanır.