Bagikan melalui


Hubungan Antara Generasi NET_BUFFER_LIST

Penulis driver harus memahami dan memelihara hubungan antara struktur NET_BUFFER_LIST induk (asli) dan struktur anak (turunan) yang dihasilkan dari operasi kloning, fragmen, dan menyusun ulang.

Pemanggil fungsi kloning/fragmen/rakit ulang mempertahankan hubungan induk/anak, termasuk pointer induk dalam struktur NET_BUFFER_LIST anak serta menghitung jumlah anak. Jumlah anak memastikan bahwa penelepon membebaskan orangtua setelah semua anak dibebaskan. Aturan berikut berlaku:

  • Setelah pengemudi membuat struktur anak dari struktur NET_BUFFER_LIST, pengemudi harus mempertahankan hak kepemilikan struktur induk dan meneruskan struktur anak tersebut kepada pengemudi lain. Driver tidak boleh meneruskan struktur NET_BUFFER_LIST induk ke driver lain.

  • Driver hanya boleh memperbarui jumlah anak dalam struktur NET_BUFFER_LIST induk. Karena struktur induk tidak pernah diteruskan ke driver lain, tidak ada risiko bahwa nilai jumlah anak dapat ditimpa. Driver harus mengatur penunjuk induk dalam struktur anak agar menunjuk ke struktur induk.

  • Ketika driver menerima NET_BUFFER_LIST dari driver lain, driver tidak boleh menimpa pointer induk. Jika struktur NET_BUFFER_LIST yang diterima adalah turunan, penunjuk induknya harus sudah ditetapkan. Driver dapat menggunakan NET_BUFFER_LIST yang diterima dari driver lain sebagai struktur induk.

  • NDIS tidak memberlakukan aturan sebelumnya. Pemilik struktur NET_BUFFER_LIST saat ini harus mengelola jumlah anak dan pointer induk. Misalnya, jika pemilik saat ini akan mengkloning dan memecah struktur NET_BUFFER_LIST, pemilik harus mengelola pointer induk dan penghitung anak.

  • NDIS mengatur jumlah anak ke nol dan pointer induk ke NULL saat mengalokasikan struktur NET_BUFFER_LIST. NDIS tidak mengubah bidang ini setiap kali driver meneruskan struktur NET_BUFFER_LIST ke driver lain.

Struktur Turunan NET_BUFFER_LIST