Fungsi NdisMIndicateReceiveNetBufferLists (ndis.h)

Driver Miniport memanggil fungsi NdisMIndicateReceiveNetBufferLists untuk menunjukkan penerimaan data dari jaringan.

Sintaks

void NdisMIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      MiniportAdapterHandle,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

Parameter

[in] MiniportAdapterHandle

Handel miniport yang diteruskan NDIS ke Fungsi MiniportInitializeEx .

NetBufferList

Daftar tertaut struktur NET_BUFFER_LIST yang dialokasikan driver miniport.

[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. Gunakan port default jika driver miniport belum mengalokasikan port untuk adaptor yang ditentukan.

[in] NumberOfNetBufferLists

Jumlah struktur NET_BUFFER_LIST yang ada dalam daftar struktur yang ditautkan di NetBufferLists .

[in] ReceiveFlags

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_RECEIVE_FLAGS_DISPATCH_LEVEL

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

NDIS_RECEIVE_FLAGS_RESOURCES

Menentukan bahwa driver miniport merebut kembali kepemilikan struktur NET_BUFFER_LIST dan struktur NET_BUFFER yang terpasang segera setelah panggilan ke pengembalian NdisMIndicateReceiveNetBufferLists .

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

Menentukan bahwa semua struktur NET_BUFFER_LIST dalam daftar di NetBufferLists memiliki jenis protokol yang sama (EtherType).

Driver miniport

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE secara opsional diatur oleh driver miniport yang yakin bahwa semua NBL dalam rantai NBL memiliki EtherType yang sama. Dengan mengatur bendera ini, driver miniport menginformasikan NDIS dan protokol lapisan atas bahwa mereka tidak perlu memeriksa setiap paket untuk EtherType-nya, yang meningkatkan performa. Driver Miniport tidak pernah diperlukan untuk mengatur bendera ini.

Filter ringan (LWF)

Saat menunjukkan penerimaan novel, filter ringan (LWF) juga dapat secara opsional mengatur NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE jika yakin bahwa semua NBL dalam rantai NBL memiliki EtherType yang sama. Namun, seperti driver miniport, LWF tidak pernah diperlukan untuk mengatur bendera ini dalam hal ini, dan selalu dapat memilih untuk menghapus bendera.

Saat melewati penerimaan dari lapisan bawah, jika LWF mengubah EtherType NBL, LWF harus menghapus bendera jika NBL tidak lagi memiliki EtherType yang sama.

Saat melewati penerimaan dari lapisan bawah, jika LWF mengubah EtherType NBL, LWF dapat mengatur bendera ini secara opsional jika yakin bahwa semua NBL dalam rantai NBL memiliki EtherType yang sama. Dalam hal ini, LWF tidak pernah diharuskan untuk mengatur bendera ini dan selalu dapat memilih untuk menghapusnya.

Saat mengonsumsi penerimaan dari lapisan bawah, jika bendera ini diatur, LWF dapat mengasumsikan bahwa setiap NBL dalam rantai memiliki EtherType yang sama. LWF tidak pernah diharuskan untuk membaca bendera ini dan sebaliknya dapat memilih untuk selalu membaca EtherType dari setiap NBL.

Saat menggabungkan beberapa rantai NBL, LWF harus menghapus bendera ini kecuali dipastikan bahwa rantai NBL baru memiliki EtherType yang homogen.

Driver protokol

Saat mengonsumsi penerimaan dari lapisan bawah, jika NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE diatur, protokol dapat mengasumsikan bahwa setiap NBL dalam rantai memiliki EtherType yang sama. Protokol tidak pernah diperlukan untuk membaca bendera ini dan sebaliknya dapat memilih untuk selalu membaca EtherType dari setiap NBL.

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

Menentukan bahwa semua struktur NET_BUFFER_LIST dalam daftar di NetBufferLists milik VLAN yang sama.

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

Menentukan bahwa semua struktur NET_BUFFER_LIST dalam daftar di NetBufferLists hanya menyertakan data yang cocok dengan filter paket dan daftar alamat multicast yang ditetapkan ke adaptor miniport.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

Menentukan bahwa semua struktur NET_BUFFER_LIST dalam daftar di NetBufferLists termasuk dalam antrean VM yang sama. Driver miniport harus mengatur bendera ini untuk semua indikasi penerima pada antrean jika bendera NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION diatur di anggota Bendera NDIS_RECEIVE_QUEUE_PARAMETERS struktur ketika antrean tersebut dialokasikan.

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

Menentukan bahwa semua struktur NET_BUFFER_LIST dalam daftar di NetBufferLists berisi informasi memori bersama yang valid. Ketika bendera ini diatur pada NET_BUFFER_LIST yang diterima, NDIS memperlakukan informasi memori bersama sebagai valid. Ketika bendera ini tidak diatur, NDIS dan driver mengabaikan informasi memori bersama. Misalnya, driver perantara yang memodifikasi data paket dapat menggunakan bendera ini untuk menentukan apakah data harus disalin. Driver Miniport dapat menggunakan bendera untuk menentukan cara membebaskan memori yang terkait dengan antrean VM saat antrean dihapus.

NDIS_RECEIVE_FLAGS_MORE_NBLS

Dicadangkan.

Nilai kembali

Tidak ada

Keterangan

Driver miniport biasanya memanggil fungsi NdisMIndicateReceiveNetBufferLists dari fungsi MiniportInterruptDPC-nya . Ketika driver miniport memanggil NdisMIndicateReceiveNetBufferLists, driver miniport menentukan daftar struktur NET_BUFFER_LIST dalam parameter NetBufferLists . NDIS meneruskan struktur NET_BUFFER_LIST ke ProtocolReceiveNetBufferLists fungsi driver protokol terikat.

Driver Miniport harus mengatur anggota SourceHandle dari setiap struktur NET_BUFFER_LIST ke nilai yang sama dengan parameter MiniportAdapterHandle .

Jika driver miniport memanggil NdisMIndicateReceiveNetBufferLists dan menghapus bendera NDIS_RECEIVE_FLAG_RESOURCES di parameter ReceiveFlags , NDIS mengembalikan struktur NET_BUFFER_LIST yang ditunjukkan ke driver miniport Fungsi MiniportReturnNetBufferLists . Dalam hal ini, driver miniport tidak boleh mengklaim kembali struktur NET_BUFFER_LIST sampai NDIS mengembalikan struktur NET_BUFFER_LIST ke fungsi MiniportReturnNetBufferLists driver miniport.

Jika driver miniport memanggil NdisMIndicateReceiveNetBufferLists dan mengatur bendera NDIS_RECEIVE_FLAG_RESOURCES dalam parameter ReceiveFlags , ini menunjukkan bahwa driver miniport harus segera mendapatkan kembali kepemilikan struktur NET_BUFFER_LIST . Dalam hal ini, NDIS tidak memanggil fungsi MiniportReturnNetBufferLists driver miniport untuk mengembalikan struktur NET_BUFFER_LIST . Sebaliknya, NDIS mengembalikan struktur NET_BUFFER_LIST ke driver miniport saat kembali dari NdisMIndicateReceiveNetBufferLists. Driver miniport harus mengklaim kembali struktur NET_BUFFER_LIST segera setelah NdisMIndicateReceiveNetBufferLists kembali. Untuk merebut kembali struktur NET_BUFFER_LIST , pengemudi miniport dapat memanggilnya sendiri Fungsi MiniportReturnNetBufferLists .

Mengatur bendera NDIS_RECEIVE_FLAG_RESOURCES di parameter ReceiveFlags memaksa driver protokol untuk menyalin data jaringan dan merilis struktur NET_BUFFER_LIST ke driver miniport. Penulis driver harus merancang driver miniport mereka dengan struktur NET_BUFFER_LIST yang telah dialokasikan sebelumnya yang cukup untuk menghindari penyalinan yang tidak perlu.

Pemanggil NdisMIndicateReceiveNetBufferLists harus menginisialisasi struktur NET_BUFFER_LIST dengan benar, struktur NET_BUFFER terlampir, dan MDL yang terpasang.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung di NDIS 6.0 dan yang lebih baru.
Target Platform Universal
Header ndis.h (termasuk Ndis.h)
Pustaka Ndis.lib
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI Irql_SendRcv_Function(ndis)

Lihat juga

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists