Bagikan melalui


Operasi Lanjutan

Operasi lanjutan mengurangi ukuran ruang data yang digunakan dalam struktur NET_BUFFER atau di semua struktur NET_BUFFER dalam struktur NET_BUFFER_LIST .

Driver menggunakan fungsi lanjutan berikut:

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

Operasi lanjutan terkadang dapat membebaskan MDL yang terkait dengan struktur NET_BUFFER. Untuk menyediakan mekanisme untuk membebaskan MDL, driver dapat menyediakan titik masuk opsional untuk fungsi NetFreeMdl . Jika titik masuk adalah NULL, NDIS menggunakan metode default untuk mengalokasikan MDL. MDL hanya boleh dikosongkan dalam NetFreeMdl menggunakan timbal balik mekanisme yang digunakan untuk mengalokasikan MDL dalam fungsi NetAllocateMdl .

Untuk mendapatkan DataLength baru, NDIS mengurangi DataOffsetDelta yang ditentukan driver dari DataLength saat ini. Jika operasi mundur sebelumnya mengalokasikan ruang data baru, operasi lanjutan dapat membebaskan memori yang dialokasikan sebelumnya. Jika operasi lanjutan tidak membebaskan memori, NDIS hanya menambahkan DataOffsetDelta ke Himpunan Data saat ini untuk mendapatkan Himpunan Data baru . Jika operasi lanjutan membebaskan memori, NDIS menyesuaikan DataOffset yang sesuai.

Untuk kasus pengiriman selesai, operasi lanjutan dapat membebaskan memori yang dialokasikan dalam operasi mundur sebelumnya. Untuk performa yang lebih baik, driver harus mengalokasikan ukuran total data yang cukup sebelum mengirim untuk mengakomodasi operasi mundur dari semua driver yang mendasar.

Untuk kasus indikasi penerimaan, operasi lanjutan cukup sesuaikan DataOffset dan DataLength yang sesuai. Setelah operasi lanjutan, header lapisan bawah tetap berada di ruang data yang tidak digunakan.