Yeniden Birleştirilmiş NET_BUFFER_LIST Yapıları

NDIS sürücüsü, mevcut bir NET_BUFFER_LIST yapısından yeniden birleştirilmiş NET_BUFFER_LIST yapısı oluşturabilir. Yeniden birleştirilmiş yapı, birden çok kaynak NET_BUFFER yapıdaki özgün verilere başvurur. Sürücüler, çok sayıda küçük arabelleği tek bir büyük arabellekte verimli bir şekilde birleştirmek için bu tür bir yapı kullanabilir.

Aşağıdaki şekilde, üst NET_BUFFER_LIST yapısı ile yeniden birleştirilmiş alt yapı arasındaki ilişki gösterilmektedir:

üst NET_BUFFER_LIST yapısı ile yeniden birleştirilmiş 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 üç 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ı, MDL'lerin eklendiği bir NET_BUFFER yapıya sahiptir. 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, parçalanmış bir NET_BUFFER_LIST yapısını yeniden birleştirmek için NdisAllocateReassembledNetBufferList işlevini çağırır. NDIS, yeniden birleştirilmiş NET_BUFFER_LIST yapısıyla yeni bir NET_BUFFER yapısı ve MDL'ler ayırır. NDIS, yeniden birleştirilmiş yapı için NET_BUFFER_LIST_CONTEXT bir yapı ayırmaz. Yeniden birleştirilmiş NET_BUFFER yapısı ve MDL'ler, üst yapıyla aynı verileri açıklar. Veriler kopyalanmaz.

Yeniden birleştirilmiş NET_BUFFER_LIST yapısını oluşturmak için NdisAllocateReassembledNetBufferList, üst NET_BUFFER yapılarının her birinde StartOffset parametresinde belirtilen bayt sayısını atlar. NdisAllocateReassembledNetBufferList, her üst NET_BUFFER yapısındaki kalan verileri yeniden birleştirilmiş bir NET_BUFFER yapısının MDL zinciriyle birleştirir. NdisAllocateReassembledNetBufferList, yeniden birleştirilmiş NET_BUFFER yapısını DataOffsetDelta içinde belirtilen miktarda geri çekilir (içinde kullanılan veri alanını artırır).

NDIS sürücüleri, yeniden birleştirilmiş bir NET_BUFFER_LIST yapısını ve ilişkili NET_BUFFER yapısını ve MDL zincirini boşaltmak için NdisFreeReassembledNetBufferList işlevini çağırır.

Türetilmiş NET_BUFFER_LIST Yapıları