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 induk NET_BUFFER_LIST dan struktur anak yang diturunkan dari induk tersebut. Struktur induk memiliki satu struktur NET_BUFFER_LIST_CONTEXT dan satu struktur NET_BUFFER dengan MDL terpasang. Penunjuk induk struktur utamanya NULL menunjukkan bahwa ini bukan struktur turunan.

Struktur NET_BUFFER_LIST anak terdiri dari tiga struktur NET_BUFFER dengan MDL yang 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. Struktur-fragmen NET_BUFFER dan MDL menjelaskan data yang sama seperti halnya struktur induk. Data tidak disalin.

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

NdisAllocateFragmentNetBufferList membagi ruang data yang digunakan di setiap struktur NET_BUFFER sumber menjadi fragmen. Panjang ruang penyimpanan data yang digunakan dari setiap fragmen kurang dari atau sama dengan nilai yang ditentukan dalam parameter MaximumLength. ruang data yang digunakan fragmen terakhir dapat kurang dari MaximumLength . Offset data 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 ditunjukkan 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 fungsiNdisFreeFragmentNetBufferList 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