Fungsi NdisAllocateNetBuffer (ndis/nblapi.h)

Panggil fungsi NdisAllocateNetBuffer untuk mengalokasikan dan menginisialisasi struktur NET_BUFFER dari kumpulan struktur NET_BUFFER .

Sintaks

NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
  [in]           NDIS_HANDLE PoolHandle,
  [in, optional] MDL         *MdlChain,
  [in]           ULONG       DataOffset,
  [in]           SIZE_T      DataLength
);

Parameter

[in] PoolHandle

Handel kumpulan struktur NET_BUFFER yang sebelumnya dikembalikan dari panggilan ke NdisAllocateNetBufferPool.

[in, optional] MdlChain

Penunjuk ke rantai MDL yang digunakan NDIS untuk menginisialisasi struktur NET_BUFFER baru. MdlChain bisa NULL.

[in] DataOffset

Offset awal, dalam byte, dari awal buffer hingga awal ruang data yang digunakan dalam rantai MDL. Ruang data di depan offset ini adalah ruang data yang tidak digunakan. Oleh karena itu, nilai ini juga mewakili jumlah awal ruang isi ulang yang tersedia dalam rantai MDL. Jika MdlChainNULL, DataOffset harus 0.

[in] DataLength

Panjang ruang data yang digunakan, dalam byte, dalam rantai MDL. Jika MdlChainNULL, DataLength harus 0.

Mengembalikan nilai

NdisAllocateNetBuffer mengembalikan pointer ke struktur NET_BUFFER yang dialokasikan NDIS. Jika alokasi tidak berhasil, penunjuk ini ADALAH NULL.

Keterangan

Panggil NdisFreeNetBuffer untuk membebaskan struktur NET_BUFFER yang dialokasikan dari kumpulan struktur NET_BUFFER .

PerhatikanNET_BUFFER dan struktur NET_BUFFER_LIST harus dialokasikan dari kumpulan buffer NDIS. Driver tidak boleh mengalokasikan dan menginisialisasi struktur NET_BUFFER atau NET_BUFFER_LIST dari kumpulan memori privat atau tumpukannya.
 
NET_BUFFER yang telah dialokasikan sebelumnya dapat digunakan kembali dengan menginisialisasinya kembali dengan rantai MDL lain ketika memiliki NET_BUFFER, tetapi bidang DataOffset, DataLength, CurrentMdl, dan CurrentMdlOffset di NET_BUFFER harus konsisten dengan rantai MDL baru.

Misalnya, jika rantai MDL asli berisi XDataLength dan YDataOffset, dan CurrentMdl dimulai dengan MDL (M) kedua dalam rantai MDL asli, CurrentMdlOffset adalah Z. Bidang MdlChain di NET_BUFFER_DATA kemudian perlu menunjuk ke rantai MDL baru yang berisi X'DataLength dan Y'DataOffset. Jika CurrentMdl dimulai dengan MDL ketiga (M') dalam rantai MDL baru, CurrentMdlOffset adalah Z', dan makro berikut perlu digunakan untuk mengatur bidang di NET_BUFFER:

NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung di NDIS 6.0 dan yang lebih baru.
Target Platform Universal
Header ndis/nblapi.h (sertakan ndis.h)
Pustaka Ndis.lib
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis)

Lihat juga

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer