Parçalanmış NET_BUFFER_LIST Yapıları

NDIS sürücüsü, mevcut bir NET_BUFFER_LIST yapısından parçalanmış bir NET_BUFFER_LIST yapısı oluşturabilir. Parçalanmış yapı, özgün verilere başvuran bir dizi NET_BUFFER yapısına başvurur; ancak veriler, boyut üst sınırını aşmayan birimlere ayrılır. Sürücüler büyük arabellekleri daha küçük arabelleklere verimli bir şekilde ayırmak için bu tür bir yapı kullanabilir.

Aşağıdaki şekilde, üst NET_BUFFER_LIST yapısı ile parçalanmış çocuk yapı arasındaki ilişki gösterilmektedir.

Ebeveyn NET_BUFFER_LIST yapısıyla parçalanmış alt yapı arasındaki ilişkiyi gösteren diyagram .

Önceki şekil, bir üst NET_BUFFER_LIST yapısını ve bu üst yapıdan türetilmiş bir alt yapıyı içerir. Üst yapı, bir NET_BUFFER_LIST_CONTEXT yapısına ve MDL'lerin ekli olduğu bir NET_BUFFER yapıya sahiptir. Ebeveyn yapının ebeveyn işaretçisi NULL olduğundan türetilmiş bir yapı değildir.

Alt NET_BUFFER_LIST yapısının MDL'leri eklenmiş üç NET_BUFFER yapısı vardır. Alt NET_BUFFER_LIST yapısının üst yapıya bir işaretçisi vardır. NET_BUFFER_LIST_CONTEXT yapı işaretçisinin olması gereken yerde NULL, alt öğenin NET_BUFFER_LIST_CONTEXT yapısına sahip olmadığını gösterir.

NDIS sürücüleri, mevcut NET_BUFFER_LIST yapısındaki verileri temel alan yeni bir parçalanmış NET_BUFFER_LIST yapısı oluşturmak için NdisAllocateFragmentNetBufferList işlevini çağırır. NDIS, parçalanmış NET_BUFFER_LIST yapısı için yeni NET_BUFFER yapıları ve MDL'leri ayırır. NDIS, parçalanmış yapı için NET_BUFFER_LIST_CONTEXT yapısı ayırmaz. Parça NET_BUFFER yapıları ve MDL'ler, üst yapı gibi aynı verileri açıklar. Veriler kopyalanmaz.

NdisAllocateFragmentNetBufferList, her üst NET_BUFFER yapısında kullanılan veri alanının başından başlayarak ve StartOffset parametresinde belirtilen değer kadar sapma yaparak parçaları oluşturur.

NdisAllocateFragmentNetBufferList, her kaynak NET_BUFFER yapısında kullanılan veri alanını parçalara ayırır. Her parçanın kullanılan veri alanı uzunluğu, MaximumLength parametresinde belirtilen değerden küçük veya buna eşittir. Son parçanın kullanılan veri alanıMaximumLength'den küçük olabilir. Yeni NET_BUFFER yapılarının veri uzaklığı, DataOffsetDelta parametresinde belirtilen bayt sayısıyla geri çekilir.

Üst NET_BUFFER_LIST yapısında birden çok NET_BUFFER yapısı varsa (çizimde gösterilmez) her NET_BUFFER yapısı için parçalama işlemi tek bir yapıyla aynıdır. Örneğin, herhangi bir üst NET_BUFFER yapısındaki son veri parçası en büyük boyuttan küçükse, NDIS bu verileri bir sonraki NET_BUFFER yapısının başındaki verilerle birleştirmez.

NDIS sürücüleri, NdisFreeFragmentNetBufferList işlevini çağırarak NET_BUFFER_LIST yapısını ve daha önce NdisAllocateFragmentNetBufferListçağrılarak ayrılmış olan tüm ilişkili NET_BUFFER yapılarını ve MDL zincirlerini serbest bırakır.

Türetilmiş NET_BUFFER_LIST Yapıları