MINIPORT_SEND_NET_BUFFER_LISTS fungsi panggilan balik (ndis.h)

NDIS memanggil fungsi MiniportSendNetBufferLists untuk mengirimkan data jaringan yang terkandung dalam daftar struktur NET_BUFFER_LIST yang ditautkan.

Catatan Anda harus mendeklarasikan fungsi dengan menggunakan jenis MINIPORT_SEND_NET_BUFFER_LISTS . Untuk informasi selengkapnya, lihat bagian Contoh berikut ini.
 

Sintaks

MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;

void MiniportSendNetBufferLists(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Parameter

[in] MiniportAdapterContext

Handel ke area konteks yang dialokasikan driver miniport dalam fungsi MiniportInitializeEx-nya . Driver miniport menggunakan area konteks ini untuk mempertahankan informasi status tentang adaptor.

[in] NetBufferList

Penunjuk ke struktur NET_BUFFER_LIST pertama dalam daftar struktur NET_BUFFER_LIST yang ditautkan. Setiap struktur NET_BUFFER_LIST dalam daftar menjelaskan daftar struktur NET_BUFFER . Setiap struktur NET_BUFFER dalam daftar memetakan ke rantai MDL. MDL berisi data jaringan.

[in] PortNumber

Nomor port yang mengidentifikasi port adaptor miniport. Untuk menetapkan nomor port adaptor miniport, panggil fungsi NdisMAllocatePort . Nilai nol mengidentifikasi port default adaptor miniport.

[in] SendFlags

Bendera yang menentukan atribut untuk operasi pengiriman. Bendera dapat dikombinasikan dengan operasi OR. Untuk menghapus semua bendera, atur anggota ini ke nol. Fungsi ini mendukung bendera berikut:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Menentukan bahwa IRQL saat ini DISPATCH_LEVEL. Untuk informasi selengkapnya tentang bendera ini, lihat Mengirimkan Pelacakan IRQL.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Menentukan bahwa NDIS harus memeriksa loopback. Secara default, NDIS tidak mengulang kembali data ke driver yang mengirimkan permintaan pengiriman. Driver yang terlalu berlebihan dapat mengambil alih perilaku ini dengan mengatur bendera ini. Ketika bendera ini diatur, NDIS mengidentifikasi semua struktur NET_BUFFER yang berisi data yang cocok dengan kriteria penerimaan untuk pengikatan. NDIS menunjukkan struktur NET_BUFFER yang cocok dengan kriteria dengan driver yang terlalu berlebihan. Bendera ini tidak berpengaruh pada pemeriksaan loopback, atau perulangan kembali, pada pengikatan lain.

Nilai kembali

Tidak ada

Keterangan

MiniportSendNetBufferLists adalah fungsi yang diperlukan untuk driver miniport. Ketika driver yang terlalu berlebihan memanggil fungsi NdisSendNetBufferLists , NDIS memanggil fungsi MiniportSendNetBufferLists dari driver miniport terikat.

Saat mengirimkan data jaringan yang diteruskan NDIS dalam parameter NetBufferLists , driver miniport harus menggunakan panduan berikut:

  1. Urutan struktur NET_BUFFER di setiap struktur NET_BUFFER_LIST harus dipertahankan.
  2. Urutan struktur NET_BUFFER_LIST harus dipertahankan jika akan ditransmisikan pada koneksi yang sama.
  3. Jika struktur NET_BUFFER_LIST akan ditransmisikan pada koneksi yang berbeda, struktur tersebut dapat dibagi menjadi beberapa antrean transmisi jika fitur berikut sedang digunakan. Dalam hal ini, urutan struktur NET_BUFFER_LIST untuk setiap koneksi harus dipertahankan.
    • Terima penskalaan sisi (RSS) (Nilai hash RSS dalam struktur NET_BUFFER_LIST dapat digunakan sebagai indeks ke dalam tabel tidak langsung RSS.)
    • Virtual Machine Queue (VMQ) (Pengidentifikasi antrean antrean keluar diatur dalam informasi OOB NetBufferListFilteringInfo . Untuk informasi selengkapnya, lihat Jalur Transmisi VMQ.)
    • IEEE 802.1 Data Center Bridging (DCB) (Anda dapat mematikan Kelas Lalu Lintas (TC).)
    • IEEE 802.1p (Anda dapat mematikan tag 802.1p tanpa DCB.)

Driver Miniport menerima semua permintaan pengiriman yang dibuat NDIS dengan memanggil fungsi MiniportSendNetBufferLists . Jika driver miniport tidak dapat segera menyelesaikan permintaan pengiriman, driver harus menahan permintaan dalam antrean hingga dapat menyelesaikan permintaan. Saat permintaan pengiriman tertunda, driver miniport mempertahankan kepemilikan struktur NET_BUFFER_LIST dan semua sumber daya yang dialokasikan protokol yang terkait dengan struktur NET_BUFFER_LIST.

Driver miniport harus memanggil Fungsi NdisMSendNetBufferListsComplete untuk menyelesaikan permintaan pengiriman untuk semua struktur NET_BUFFER_LIST. Untuk meningkatkan performa sistem, driver dapat membuat daftar tertaut yang berisi struktur NET_BUFFER_LIST dari beberapa permintaan pengiriman. Driver kemudian dapat meneruskan daftar tertaut seperti itu dalam satu panggilan ke struktur NdisMSendNetBufferListsComplete.NET_BUFFER_LIST dan sumber daya terkait lainnya harus diperlakukan sebagai tidak dapat diakses oleh driver miniport segera setelah driver memanggil NdisMSendNetBufferListsComplete.

Fungsi MiniportSendNetBufferLists harus menyinkronkan akses ke antrean internal data jaringannya dengan fungsi MiniportXxx driver lainnya yang mengakses antrean yang sama. Driver miniport dapat menggunakan kunci putar untuk menyinkronkan akses ke antrean.

Driver protokol bertanggung jawab untuk menentukan data jaringan apa yang diperlukan, berdasarkan jenis sedang yang dipilih driver miniport terikat. Namun, driver protokol dapat menyediakan data jaringan yang menentukan paket yang lebih pendek dari ukuran paket minimum untuk media yang dipilih. Dalam hal ini, MiniportSendNetBufferLists harus memenuhi paket dengan nol jika media yang dipilih memberlakukan persyaratan panjang minimum pada ukuran paket pengiriman.

Jika driver miniport mengatur bendera NDIS_MAC_OPTION_NO_LOOPBACK saat NDIS mengkueri OID OID_GEN_MAC_OPTIONS , driver miniport tidak boleh mencoba mengulang kembali data jaringan apa pun. NDIS menyediakan dukungan loopback perangkat lunak untuk driver tersebut.

NDIS memanggil MiniportSendNetBufferLists di IRQL<= DISPATCH_LEVEL.

Contoh

Untuk menentukan fungsi MiniportSendNetBufferLists , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi untuk pengandar. Mendeklarasikan fungsi menggunakan jenis fungsi membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan fungsi MiniportSendNetBufferLists yang diberi nama "MySendNetBufferLists", gunakan jenis MINIPORT_SEND_NET_BUFFER_LISTS seperti yang ditunjukkan dalam contoh kode ini:

MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Kemudian, terapkan fungsi Anda sebagai berikut:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  MiniportAdapterContext,
    PNET_BUFFER_LIST  NetBufferList,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Jenis fungsi MINIPORT_SEND_NET_BUFFER_LISTS didefinisikan dalam file header Ndis.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi MINIPORT_SEND_NET_BUFFER_LISTS dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver NDIS.

Untuk informasi tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung di NDIS 6.0 dan yang lebih baru.
Target Platform Windows
Header ndis.h (termasuk Ndis.h)
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI NdisTimedDataHang, NdisTimedDataSend

Lihat juga

MiniportInitializeEx

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisSendNetBufferLists

OID_GEN_MAC_OPTIONS