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.
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_LIST_POOL_PARAMETERS
NdisAllocateNetBufferListPool