Bagikan melalui


Struktur NET_BUFFER_LIST Terfragmentasi

Driver NDIS dapat membuat struktur NET_BUFFER_LIST terfragmentasi dari struktur NET_BUFFER_LIST yang ada. Struktur terfragmentasi mereferensikan sekumpulan struktur NET_BUFFER yang mereferensikan data asli; namun, data dibagi menjadi unit yang tidak melebihi ukuran maksimum. Driver dapat menggunakan jenis struktur ini untuk memecah buffer besar secara efisien menjadi buffer yang lebih kecil.

Gambar berikut menunjukkan hubungan antara struktur NET_BUFFER_LIST induk dan anak yang terfragmentasi.

Diagram memperlihatkan hubungan antara struktur NET_BUFFER_LIST induk dan struktur anaknya yang terfragmentasi.

Gambar sebelumnya berisi struktur NET_BUFFER_LIST induk dan struktur anak yang berasal dari induk tersebut. Struktur induk memiliki satu struktur NET_BUFFER_LIST_CONTEXT dan satu struktur NET_BUFFER dengan MDL terpasang. Penunjuk induk struktur induk adalah NULL yang menunjukkan bahwa itu bukan struktur turunan.

Struktur NET_BUFFER_LIST anak memiliki tiga struktur NET_BUFFER dengan MDL terpasang. Struktur NET_BUFFER_LIST anak memiliki penunjuk ke struktur induk. NULL di mana penunjuk struktur NET_BUFFER_LIST_CONTEXT akan menunjukkan bahwa anak tidak memiliki struktur NET_BUFFER_LIST_CONTEXT.

Driver NDIS memanggil fungsi NdisAllocateFragmentNetBufferList untuk membuat struktur NET_BUFFER_LIST terfragmentasi baru yang didasarkan pada data dalam struktur NET_BUFFER_LIST yang ada. NDIS mengalokasikan struktur NET_BUFFER dan MDL baru untuk struktur NET_BUFFER_LIST terfragmentasi. NDIS tidak mengalokasikan struktur NET_BUFFER_LIST_CONTEXT untuk struktur terfragmentasi. Fragmen NET_BUFFER struktur dan MDL menjelaskan data yang sama seperti struktur induk. Data tidak disalin.

NdisAllocateFragmentNetBufferList membuat fragmen, mulai dari awal ruang data yang digunakan di setiap struktur NET_BUFFER induk dan offset oleh nilai yang ditentukan dalam parameter StartOffset .

NdisAllocateFragmentNetBufferList membagi ruang data yang digunakan di setiap struktur NET_BUFFER sumber menjadi fragmen. Panjang ruang data yang digunakan dari setiap fragmen kurang dari atau sama dengan nilai yang ditentukan dalam parameter MaximumLength . Ruang data yang digunakan dari fragmen terakhir dapat kurang dari MaximumLength . Offset data dari struktur NET_BUFFER baru mundur dengan jumlah byte yang ditentukan dalam parameter DataOffsetDelta .

Jika ada beberapa struktur NET_BUFFER dalam struktur NET_BUFFER_LIST induk (tidak ditampilkan dalam ilustrasi) proses fragmentasi untuk setiap struktur NET_BUFFER sama dengan untuk satu struktur. Misalnya, jika bagian terakhir data dalam struktur NET_BUFFER induk lebih kecil dari ukuran maksimum, NDIS tidak menggabungkan data tersebut dengan data pada awal struktur NET_BUFFER berikutnya.

Driver NDIS memanggil fungsi NdisFreeFragmentNetBufferList untuk membebaskan struktur NET_BUFFER_LIST dan semua struktur NET_BUFFER terkait dan rantai MDL yang sebelumnya dialokasikan dengan memanggil NdisAllocateFragmentNetBufferList.

Struktur NET_BUFFER_LIST Turunan