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_SIZE

ParentNetBufferList

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

MiniportInitializeEx

Driver Protokol

ProtocolBindAdapterEx

Filter Driver

FilterAttach

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.

Catatan Dimulai dengan NDIS 6.30, dua bit tambahan tersedia untuk penggunaan protokol: 0x00000003. Protokol NDIS 6.30 dapat menggunakan bit ini jika dan hanya jika NdisGetVersion mengembalikan nilai yang lebih besar dari atau sama dengan NDIS_RUNTIME_VERSION_630. Protokol tidak boleh menggunakan bit ini pada versi NDIS yang lebih lama, karena sebelum 6.30, NDIS menggunakannya secara internal.
 

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:

NdisAllocateNetBufferList

NdisAllocateNetBufferAndNetBufferList NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateReassembledNetBufferList

Semua 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.
Pemilik daftar struktur NET_BUFFER_LIST saat ini dapat memindahkan struktur NET_BUFFER_LIST ke daftar lain. Namun, semua struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST harus tetap dengan struktur NET_BUFFER_LIST yang sama. Hanya driver yang membuat struktur NET_BUFFER yang dapat memindahkannya ke struktur NET_BUFFER_LIST yang berbeda. Pemilik saat ini tidak dapat mengubah anggota Berikutnya struktur NET_BUFFER.

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_NEXT_NBL

NET_BUFFER_LIST_FIRST_NB

NET_BUFFER_LIST_FLAGS

NET_BUFFER_LIST_CONTEXT_DATA_SIZE NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_MINIPORT_RESERVED

NET_BUFFER_LIST_INFO

NET_BUFFER_LIST_STATUS

NET_BUFFER_LIST_PROTOCOL_RESERVED NdisGetPoolFromNetBufferList

Untuk 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)

Lihat juga

NDIS_NET_BUFFER_LIST_INFO

NET_BUFFER

NET_BUFFER_LIST_CONTEXT

NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZE

NET_BUFFER_LIST_FIRST_NB

NET_BUFFER_LIST_FLAGS

NET_BUFFER_LIST_HEADER

NET_BUFFER_LIST_INFO

NET_BUFFER_LIST_MINIPORT_RESERVED

NET_BUFFER_LIST_NEXT_NBL

NET_BUFFER_LIST_PROTOCOL_RESERVED

NET_BUFFER_LIST_STATUS

NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBufferListContext NdisAllocateReassembledNetBufferList

NdisCancelSendNetBufferLists

NdisClearNblFlag

NdisFreeNetBufferListContext

NdisGeneratePartialCancelId

NdisGetPoolFromNetBufferList

NdisSendNetBufferLists

NdisSetNblFlag

NdisTestNblFlag

NdisTestNblFlags