Bagikan melalui


Operasi Mundur

Operasi retreat dapat meningkatkan ukuran ruang data yang digunakan dalam struktur NET_BUFFER atau di semua struktur NET_BUFFER dalam struktur NET_BUFFER_LIST .

NDIS menyediakan fungsi mundur berikut:

NdisRetreatNetBufferDataStart

NdisRetreatNetBufferListDataStart

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

Untuk mendapatkan DataLength baru, NDIS menambahkan DataOffsetDelta yang ditentukan driver ke DataLength saat ini. Jika ukuran ruang data yang tidak digunakan lebih besar dari DataOffsetDelta, operasi mundur mengurangi DataOffset . Dalam hal ini, DataOffset baru adalah DataOffset saat ini dikurangi DataOffsetDelta .

Jika DataOffsetDelta lebih besar dari DataOffset, operasi mundur mengalokasikan ruang data baru. Dalam hal ini, NDIS menyesuaikan DataOffset yang sesuai.

Untuk operasi pengiriman, NDIS mengalokasikan memori jika tidak ada cukup ruang data yang tidak digunakan untuk memenuhi permintaan mundur. Jika tidak ada alokasi memori yang diperlukan, NDIS hanya menyesuaikan DataOffset dan DataLength . 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 pengembalian penerimaan, NDIS hanya menyesuaikan DataOffset dan DataLength yang sesuai. Operasi mundur membalikkan operasi lanjutan yang berlangsung selama pemrosesan penerimaan. Setelah operasi mundur, ruang data yang digunakan berisi data header yang digunakan driver yang mendasar selama pemrosesan penerimaan.