Bagikan melalui


Hubungan Antara Generasi NET_BUFFER_LIST

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

Pemanggil fungsi klon/fragmen/rakitan ulang mempertahankan hubungan induk/anak, termasuk penunjuk induk dalam struktur NET_BUFFER_LIST anak dan jumlah anak. Jumlah anak memastikan bahwa penelepon membebaskan induk setelah semua anak dibebaskan. Aturan berikut ini akan berlaku:

  • Setelah driver membuat struktur anak dari struktur NET_BUFFER_LIST , driver harus mempertahankan kepemilikan struktur induk dan harus meneruskan struktur anak ke driver 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 pointer induk dalam struktur anak untuk 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 anak, pointer induknya harus sudah diatur. 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 penunjuk 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 NET_BUFFER_LIST Turunan