Fungsi NdisAllocateNetBufferAndNetBufferList (ndis/nblapi.h)

Panggil fungsi NdisAllocateNetBufferAndNetBufferList untuk mengalokasikan dan menginisialisasi struktur NET_BUFFER_LIST yang diinisialisasi dengan struktur NET_BUFFER yang telah dialokasikan sebelumnya.

Sintaks

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateNetBufferAndNetBufferList(
  [in]           NDIS_HANDLE          PoolHandle,
  [in]           USHORT               ContextSize,
  [in]           USHORT               ContextBackFill,
  [in, optional] __drv_aliasesMem MDL *MdlChain,
  [in]           ULONG                DataOffset,
  [in]           SIZE_T               DataLength
);

Parameter

[in] PoolHandle

Handel kumpulan struktur NET_BUFFER_LIST yang sebelumnya dikembalikan dari Fungsi NdisAllocateNetBufferListPool . Anggota fAllocateNetBuffer dari struktur NET_BUFFER_LIST_POOL_PARAMETERS yang diteruskan pemanggil ke NdisAllocateNetBufferListPool harus diatur ke TRUE dan anggota DataSize diatur ke nol.

[in] ContextSize

Jumlah ruang data yang digunakan dalam struktur NET_BUFFER_LIST_CONTEXT untuk dicadangkan bagi pemanggil. ContextSize harus berupa kelipatan nilai yang ditentukan oleh MEMORY_ALLOCATION_ALIGNMENT.

[in] ContextBackFill

Jumlah ruang data yang tidak digunakan (ruang isi ulang) yang diperlukan pemanggil. NDIS menambahkan nilai ini ke ContextSize dan mengalokasikan ruang tambahan. ContextBackFill harus berupa kelipatan nilai yang ditentukan oleh MEMORY_ALLOCATION_ALIGNMENT.

[in, optional] MdlChain

Penunjuk ke rantai MDL yang digunakan NDIS untuk menginisialisasi struktur NET_BUFFER yang telah dialokasikan sebelumnya. 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

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

Nilai kembali

NdisAllocateNetBufferAndNetBufferList mengembalikan penunjuk ke struktur NET_BUFFER_LIST yang dialokasikan. Struktur NET_BUFFER_LIST mencakup struktur NET_BUFFER. Jika alokasi tidak berhasil, penunjuk ini ADALAH NULL.

Keterangan

Struktur yang dialokasikan fungsi NdisAllocateNetBufferAndNetBufferList harus berasal dari kumpulan yang mencakup struktur NET_BUFFER_LIST yang dipasangkan dengan struktur NET_BUFFER yang telah dialokasikan sebelumnya. Untuk membuat kumpulan seperti itu, Anda harus memanggil Fungsi NdisAllocateNetBufferListPool dengan anggota fAllocateNetBuffer dari struktur NET_BUFFER_LIST_POOL_PARAMETERS diatur ke TRUE, dan anggota DataSize diatur ke nol.

PerhatikanNET_BUFFER dan struktur NET_BUFFER_LIST harus dialokasikan dari kumpulan buffer NDIS. Driver tidak boleh mengalokasikan dan menginisialisasi struktur NET_BUFFER_LIST atau NET_BUFFER dari kumpulan memori privat atau tumpukannya.
 
Panggil fungsi NdisFreeNetBufferList untuk membebaskan struktur NET_BUFFER_LIST .

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), NdisAllocateNetBufferList(ndis), NdisAllocateNetBufferList_InitFail(ndis)

Lihat juga

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NET_BUFFER_LIST_POOL_PARAMETERS

NdisAllocateNetBufferListPool

NdisFreeNetBufferList