struktur NET_BUFFER_LIST (ndis/nbl.h)
Struktur NET_BUFFER_LIST menentukan daftar struktur NET_BUFFER yang ditautkan.
Sintaks
typedef struct _NET_BUFFER_LIST {
union {
struct {
NET_BUFFER_LIST *Next;
NET_BUFFER *FirstNetBuffer;
};
SLIST_HEADER Link;
NET_BUFFER_LIST_HEADER NetBufferListHeader;
};
NET_BUFFER_LIST_CONTEXT *Context;
NET_BUFFER_LIST *ParentNetBufferList;
NDIS_HANDLE NdisPoolHandle;
PVOID NdisReserved[2];
PVOID ProtocolReserved[4];
PVOID MiniportReserved[2];
PVOID Scratch;
NDIS_HANDLE SourceHandle;
ULONG NblFlags;
LONG ChildRefCount;
ULONG Flags;
union {
NDIS_STATUS Status;
ULONG NdisReserved2;
};
PVOID NetBufferListInfo[MaxNetBufferListInfo];
} NET_BUFFER_LIST, *PNET_BUFFER_LIST;
Anggota
Next
Struktur NET_BUFFER_LIST berikutnya dalam rantai.
Driver tidak boleh mengakses anggota ini secara langsung. Sebaliknya, mereka harus memanggil makro NET_BUFFER_LIST_NEXT_NBL .
FirstNetBuffer
NET_BUFFER pertama pada NET_BUFFER_LIST ini.
Driver tidak boleh mengakses anggota ini secara langsung. Sebaliknya, mereka harus memanggil makro NET_BUFFER_LIST_FIRST_NB .
Link
Dicadangkan untuk NDIS.
NetBufferListHeader
Struktur NET_BUFFER_LIST_HEADER .
Context
Penunjuk ke struktur NET_BUFFER_LIST_CONTEXT . Driver protokol dan miniport menggunakan struktur ini untuk menyimpan informasi tentang struktur NET_BUFFER_LIST. Informasi yang disimpan dalam struktur NET_BUFFER_LIST_CONTEXT buram untuk NDIS dan driver lain dalam tumpukan.
Gunakan fungsi dan makro berikut untuk mengakses data dalam struktur NET_BUFFER_LIST_CONTEXT:
NdisAllocateNetBufferListContext NdisFreeNetBufferListContext NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZEParentNetBufferList
Jika struktur NET_BUFFER_LIST ini adalah klon struktur NET_BUFFER_LIST lain, anggota ini menentukan penunjuk ke struktur NET_BUFFER_LIST induk. Jika tidak, parameter ini ADALAH NULL. Driver menggunakan Fungsi NdisAllocateCloneNetBufferList untuk membuat kloning.
NdisPoolHandle
Handel kumpulan yang mengidentifikasi kumpulan NET_BUFFER_LIST tempat struktur NET_BUFFER_LIST dialokasikan.
NdisReserved[2]
Dicadangkan untuk digunakan oleh NDIS.
ProtocolReserved[4]
Dicadangkan untuk digunakan oleh driver protokol.
MiniportReserved[2]
Dicadangkan untuk digunakan oleh driver miniport.
Scratch
Data yang ditentukan oleh pemilik struktur NET_BUFFER_LIST saat ini. Pemilik saat ini, baik NDIS atau driver NDIS, dapat menggunakan anggota ini untuk tujuan mereka sendiri. Ketika struktur NET_BUFFER_LIST awalnya dialokasikan, anggota ini adalah NULL. Setelah pemilik saat ini melepaskan kepemilikan, NDIS atau driver lain dapat menimpa anggota ini.
SourceHandle
Handel yang diberikan NDIS kepada driver dalam operasi pengikatan atau pemasangan dengan menggunakan salah satu rutinitas yang disediakan driver berikut:
Miniport Driver
Driver Protokol
Filter Driver
NDIS menggunakan SourceHandle untuk mengembalikan struktur NET_BUFFER_LIST ke driver yang mengirim struktur NET_BUFFER_LIST.
NblFlags
Anggota ini berisi bendera yang dapat dikombinasikan dengan operasi OR bitwise.
Gunakan makro NdisTestNblFlag, NdisTestNblFlags, NdisSetNblFlag, dan NdisClearNblFlag untuk mengakses bendera.
Driver perantara dan driver filter dapat mengatur bendera berikut jika tidak mengubah data yang terkait dengan NET_BUFFER_LIST. Misalnya, jika data tidak berubah, NDIS mungkin menggunakan kembali informasi asli tempat NET_BUFFER_LIST dibuat.
NDIS_NBL_FLAGS_SEND_READ_ONLY
Jika diatur, struktur NET_BUFFER_LIST dan datanya bersifat baca-saja untuk operasi pengiriman.
NDIS_NBL_FLAGS_RECV_READ_ONLY
Jika diatur, struktur NET_BUFFER_LIST dan datanya bersifat baca-saja untuk operasi penerimaan.
Driver dapat mengatur bendera berikut meskipun tidak membagi bingkai Ethernet terkait:
NDIS_NBL_FLAGS_IS_IPV4
Semua bingkai Ethernet dalam struktur NET_BUFFER_LIST ini adalah bingkai IPv4. Jika bendera ini diatur, penyedia pemisah header-data tidak boleh mengatur bendera NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_IPV6
Semua bingkai Ethernet dalam struktur NET_BUFFER_LIST ini adalah bingkai IPv6. Jika bendera ini diatur, penyedia pemisah header-data tidak boleh mengatur bendera NDIS_NBL_FLAGS_IS_IPV4.
NDIS_NBL_FLAGS_IS_TCP
Semua bingkai Ethernet dalam struktur NET_BUFFER_LIST ini adalah bingkai TCP. Jika bendera ini diatur, penyedia pemisah header-data tidak boleh mengatur bendera NDIS_NBL_FLAGS_IS_UDP, dan penyedia harus mengatur bendera NDIS_NBL_FLAGS_IS_IPV4 atau bendera NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_UDP
Semua bingkai Ethernet dalam struktur NET_BUFFER_LIST ini adalah bingkai UDP. Jika bendera ini diatur, penyedia pemisah data header tidak boleh mengatur bendera NDIS_NBL_FLAGS_IS_TCP, dan penyedia harus mengatur bendera NDIS_NBL_FLAGS_IS_IPV4 atau bendera NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET
Semua paket yang terkait dengan struktur NET_BUFFER_LIST ini adalah paket loopback.
Jika penyedia pemisahan data header tidak membagi bingkai Ethernet terkait, driver miniport harus menunjukkan struktur NET_BUFFER_LIST dengan bendera berikut dihapus:
NDIS_NBL_FLAGS_HD_SPLIT
Header dan data dibagi di semua bingkai Ethernet yang terkait dengan struktur NET_BUFFER_LIST ini.
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
Semua bingkai Ethernet dalam NET_BUFFER_LIST ini dibagi di awal header protokol lapisan atas. Jika bendera ini diatur, penyedia pemisah header-data harus mengatur bendera NDIS_NBL_FLAGS_IS_IPV4 atau bendera NDIS_NBL_FLAGS_IS_IPV6. Selain itu, penyedia dapat mengatur bendera NDIS_NBL_FLAGS_IS_TCP atau bendera NDIS_NBL_FLAGS_IS_UDP, tetapi penyedia tidak boleh mengatur bendera NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD.
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD
Semua bingkai Ethernet dalam struktur NET_BUFFER_LIST ini dibagi di awal payload TCP atau UDP. Jika bendera ini diatur, penyedia pemisah header-data harus mengatur bendera NDIS_NBL_FLAGS_IS_IPV4 atau bendera NDIS_NBL_FLAGS_IS_IPV6. Selain itu, penyedia harus mengatur bendera NDIS_NBL_FLAGS_IS_TCP atau bendera NDIS_NBL_FLAGS_IS_UDP, tetapi penyedia tidak boleh mengatur bendera NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER.
ChildRefCount
Jika struktur NET_BUFFER_LIST ini memiliki klon (adalah induk), anggota ini menentukan jumlah kloning yang luar biasa. Jika tidak, anggota ini nol.
Flags
Atribut struktur NET_BUFFER_LIST. Definisi berikut menentukan masker bit untuk sekumpulan bendera:
NBL_FLAGS_PROTOCOL_RESERVED
Set ini dicadangkan untuk driver protokol.
NBL_FLAGS_MINIPORT_RESERVED
Set ini dicadangkan untuk driver miniport.
NBL_FLAGS_SCRATCH
Pemilik struktur NET_BUFFER_LIST saat ini, baik NDIS atau driver NDIS, dapat menggunakan set ini. Ketika pemilik saat ini melepaskan kepemilikan, NDIS atau driver lain dapat menimpa bendera ini.
NBL_FLAGS_NDIS_RESERVED
Set ini dicadangkan untuk NDIS.
Status
Status penyelesaian akhir operasi data jaringan pada struktur NET_BUFFER_LIST ini. Driver miniport menulis nilai ini sebelum memanggil Fungsi NdisMSendNetBufferListsComplete . Driver miniport menentukan salah satu nilai berikut:
NDIS_STATUS_SUCCESS
Semua data jaringan yang dijelaskan oleh struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST ini berhasil ditransmisikan melalui jaringan.
NDIS_STATUS_INVALID_LENGTH
Ukuran data dalam beberapa struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST ini terlalu besar untuk NIC yang mendasar.
NDIS_STATUS_RESOURCES
Permintaan pengiriman untuk struktur NET_BUFFER_LIST ini gagal karena sumber daya yang tidak mencukup.
NDIS_STATUS_FAILURE
Permintaan pengiriman untuk struktur NET_BUFFER_LIST ini gagal karena beberapa alasan selain yang dinyatakan dalam tiga nilai sebelumnya.
NDIS_STATUS_SEND_ABORTED
NDIS disebut fungsi MiniportCancelSend untuk membatalkan operasi pengiriman untuk struktur NET_BUFFER_LIST ini.
NDIS_STATUS_RESET_IN_PROGRESS
Driver miniport membatalkan permintaan pengiriman karena reset.
NDIS_STATUS_PAUSED
Jika driver harus menolak permintaan pengiriman karena dijeda, driver akan menetapkan status lengkap di setiap NET_BUFFER_LIST yang terpengaruh ke NDIS_STATUS_PAUSED.
NdisReserved2
Dicadangkan untuk NDIS.
NetBufferListInfo[MaxNetBufferListInfo]
Array nilai yang berisi informasi yang umum untuk semua struktur NET_BUFFER dalam daftar. Informasi ini sering disebut sebagai data "out-of-band (OOB)."
Gunakan NDIS_NET_BUFFER_LIST_INFO nilai enumerasi dengan makro NET_BUFFER_LIST_INFO untuk mengatur dan mendapatkan nilai dalam array NetBufferListInfo .
Keterangan
Driver NDIS dapat memanggil salah satu fungsi berikut untuk mengalokasikan dan menginisialisasi struktur NET_BUFFER_LIST:
NdisAllocateNetBufferAndNetBufferList NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateReassembledNetBufferListSemua struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST memiliki atribut yang ditentukan oleh anggota NetBufferListInfo dan Context .
Ketika driver memanggil fungsi NdisSendNetBufferLists atau NdisFSendNetBufferLists , ia kehilangan kepemilikan:
- Struktur NET_BUFFER_LIST yang ditentukan.
- Struktur NET_BUFFER dan MDL yang terpasang.
- Setiap NDIS_REQUEST_CONTROLs terlampir.
- Semua data NetBufferListInfo yang terkait dengan struktur NET_BUFFER_LIST.
Daftar struktur NET_BUFFER_LIST adalah daftar sederhana yang ditautkan dan dihentikan NULL. Untuk memindahkan struktur NET_BUFFER_LIST ke daftar lain, buat pembaruan yang sesuai untuk anggota Berikutnya di daftar sumber dan tujuan.
Untuk mengakses anggota struktur NET_BUFFER_LIST, gunakan makro dan fungsi berikut:
NET_BUFFER_LIST_CONTEXT_DATA_SIZE NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_MINIPORT_RESERVED NET_BUFFER_LIST_PROTOCOL_RESERVED NdisGetPoolFromNetBufferListUntuk informasi selengkapnya tentang cara menggunakan buffer net, lihat Arsitektur NET_BUFFER.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Didukung di NDIS 6.0 dan yang lebih baru. |
Header | ndis/nbl.h (termasuk ndis.h) |