Bagikan melalui


Menangani Data yang Dibuffer

Beberapa fungsi penyedia jaringan mengambil alamat dan ukuran buffer yang digunakan oleh fungsi untuk menempatkan struktur data dengan ukuran variabel.

Dalam setiap kasus, mekanisme yang digunakan sama. Pemanggil mengalokasikan buffer dan meneruskan alamatnya ke fungsi. Ini juga meneruskan alamat DWORD yang menentukan ukuran buffer, dalam byte.

Fungsi kemudian menyalin sebanyak mungkin struktur data yang diminta ke dalam buffer. Jika semua data cocok dengan buffer, fungsi akan mengembalikan WN_SUCCESS. Jika data tidak masuk ke dalam buffer, data mungkin tetap tidak lengkap, dan fungsi menghasilkan kesalahan WN_MORE_DATA. Dalam kedua kasus, DWORD menunjukkan ukuran buffer diatur ke jumlah byte yang sebenarnya diperlukan oleh struktur data. Dengan cara ini, jika buffer yang diteruskan terlalu kecil dan fungsi gagal, pemanggil dapat mengalokasikan buffer baru dengan ukuran yang diperlukan dan memanggil fungsi lagi.

Saat struktur data yang dikembalikan menyertakan string panjang variabel, struktur data individual biasanya berisi pointer ke string ini. String itu sendiri juga harus ditempatkan dalam buffer. Namun, penting untuk menempatkannya di akhir buffer. Jika tidak, mereka akan membuat pengindeksan ke struktur Nth tidak mungkin. Dengan kata lain, semua struktur terletak bersebelahan di awal buffer. Penunjuk ke string atau data dengan panjang variabel harus berupa penunjuk yang sesungguhnya, bukan offset dalam buffer.

Ketika buffer digunakan untuk meneruskan dan mengembalikan data yang hanya terdiri dari string, DWORD menentukan ukuran buffer harus diatur ke jumlah total karakter yang akan pas dalam string ini, bukan ke jumlah byte.