Bagikan melalui


Menyusun ulang Struktur NET_BUFFER_LIST

Driver NDIS dapat membuat struktur NET_BUFFER_LIST yang disusun ulang dari struktur NET_BUFFER_LIST yang ada. Struktur yang disusun ulang mengacu pada data asli dari beberapa struktur sumber NET_BUFFER. Driver dapat menggunakan jenis struktur ini untuk menggabungkan banyak buffer yang lebih kecil secara efisien ke dalam satu buffer besar.

Gambar berikut menunjukkan hubungan antara struktur NET_BUFFER_LIST induk dan struktur anak yang disusun ulang:

Diagram yang mengilustrasikan hubungan antara struktur NET_BUFFER_LIST induk dan struktur anak yang disusun ulang.

Gambar di atas menunjukkan struktur NET_BUFFER_LIST induk dan struktur anak yang berasal dari induk tersebut. Struktur induk memiliki satu struktur NET_BUFFER_LIST_CONTEXT dan tiga struktur NET_BUFFER dengan MDL terpasang. Penunjuk induk dari struktur induk adalah NOL yang menunjukkan bahwa itu bukan struktur turunan.

Struktur NET_BUFFER_LIST anak memiliki satu 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 fungsiNdisAllocateReassembledNetBufferList untuk menyusun kembali struktur NET_BUFFER_LIST terfragmentasi. NDIS mengalokasikan struktur NET_BUFFER dan MDL baru dengan struktur NET_BUFFER_LIST yang disusun ulang. NDIS tidak mengalokasikan struktur NET_BUFFER_LIST_CONTEXT untuk struktur yang disusun ulang. Struktur NET_BUFFER dan MDL yang disusun ulang menjelaskan data yang sama seperti struktur induk. Data tidak disalin.

Untuk membuat struktur NET_BUFFER_LIST yang disusun ulang, NdisAllocateReassembledNetBufferList melewati jumlah byte yang ditentukan dalam parameter StartOffset di setiap struktur NET_BUFFER induk. NdisAllocateReassembledNetBufferList menggabungkan data yang tersisa di setiap struktur NET_BUFFER induk ke dalam rantai MDL dari satu struktur NET_BUFFER yang disusun ulang. NdisAllocateReassembledNetBufferList menarik kembali (meningkatkan ruang data yang digunakan dalam) struktur NET_BUFFER yang telah disusun ulang dengan jumlah yang ditentukan oleh DataOffsetDelta .

Driver NDIS memanggil fungsiNdisFreeReassembledNetBufferList untuk membebaskan struktur NET_BUFFER_LIST yang disusun ulang dan struktur NET_BUFFER terkait dan rantai MDL.

Struktur NET_BUFFER_LIST Turunan