PROTOCOL_RECEIVE_NET_BUFFER_LISTS fungsi panggilan balik (ndis.h)

Proses fungsi ProtocolReceiveNetBufferLists menerima indikasi dari driver yang mendasar.

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

Sintaks

PROTOCOL_RECEIVE_NET_BUFFER_LISTS ProtocolReceiveNetBufferLists;

void ProtocolReceiveNetBufferLists(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG NumberOfNetBufferLists,
  [in] ULONG ReceiveFlags
)
{...}

Parameter

[in] ProtocolBindingContext

Handel ke area konteks yang dialokasikan driver protokol untuk mempertahankan informasi status untuk pengikatan. Handel ini diteruskan ke NDIS dalam panggilan sebelumnya ke fungsi NdisOpenAdapterEx .

[in] NetBufferLists

Daftar tertaut struktur NET_BUFFER_LIST yang dialokasikan driver yang mendasar. Setiap struktur NET_BUFFER_LIST biasanya dikaitkan dengan satu struktur NET_BUFFER .

[in] PortNumber

Nomor port yang mengidentifikasi port adaptor miniport. Nomor port default adaptor miniport adalah nol. Driver protokol yang tidak menggunakan port adaptor miniport harus mengabaikan parameter ini.

[in] NumberOfNetBufferLists

Jumlah struktur NET_BUFFER_LIST yang ada dalam daftar struktur tertaut 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 Pengiriman Pelacakan IRQL.

NDIS_RECEIVE_FLAGS_RESOURCES

Menentukan bahwa NDIS merebut kembali kepemilikan struktur NET_BUFFER_LIST dan struktur NET_BUFFER yang terlampir segera setelah panggilan ke ProtocolReceiveNetBufferLists kembali.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

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

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

Menentukan bahwa semua struktur NET_BUFFER_LIST dalam daftar di NetBufferLists termasuk dalam 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 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

ProtocolReceiveNetBufferLists adalah fungsi yang diperlukan untuk driver protokol. NDIS memanggil ProtocolReceiveNetBufferLists setelah driver miniport terikat memanggil Fungsi NdisMIndicateReceiveNetBufferLists . Panggilan ke ProtocolReceiveNetBufferLists juga dapat terjadi sebagai akibat dari loopback.

Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES dalam parameter ReceiveFlags tidak diatur, driver protokol mempertahankan kepemilikan struktur NET_BUFFER_LIST sampai memanggil Fungsi NdisReturnNetBufferLists .

Jika NDIS menetapkan bendera NDIS_RECEIVE_FLAGS_RESOURCES driver protokol tidak dapat mempertahankan struktur NET_BUFFER_LIST dan sumber daya terkait. Bendera set NDIS_RECEIVE_FLAGS_RESOURCES menunjukkan bahwa driver yang mendasar hampir kehabisan sumber daya penerima. Dalam hal ini, fungsi ProtocolReceiveNetBufferLists harus menyalin data yang diterima ke penyimpanan yang dialokasikan protokol dan kembali secepat mungkin.

Catatan Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES diatur, driver protokol harus mempertahankan set asli struktur NET_BUFFER_LIST dalam daftar yang ditautkan. Misalnya, ketika bendera ini diatur, driver mungkin memproses struktur dan menunjukkannya naik tumpukan satu per satu tetapi sebelum fungsi mengembalikannya harus memulihkan daftar asli yang ditautkan.
 
Pada sistem multiprosesor, fungsi ini dapat dijalankan secara bersamaan pada lebih dari satu prosesor. Terapkan perlindungan (misalnya, gunakan kunci putar) ke struktur data penting yang diakses oleh ProtocolReceiveNetBufferLists.

NDIS memanggil ProtocolReceiveNetBufferLists di IRQL<= DISPATCH_LEVEL.

Contoh

Untuk menentukan fungsi ProtocolReceiveNetBufferLists , 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 ProtocolReceiveNetBufferLists yang diberi nama "MyReceiveNetBufferLists", gunakan jenis PROTOCOL_RECEIVE_NET_BUFFER_LISTS seperti yang ditunjukkan dalam contoh kode ini:

PROTOCOL_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;

Kemudian, terapkan fungsi Anda sebagai berikut:

_Use_decl_annotations_
VOID
 MyReceiveNetBufferLists(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  NumberOfNetBufferLists,
    ULONG ReceiveFlags
    )
  {...}

Jenis fungsi PROTOCOL_RECEIVE_NET_BUFFER_LISTS ditentukan 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 PROTOCOL_RECEIVE_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

Lihat juga

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMIndicateReceiveNetBufferLists

NdisOpenAdapterEx

NdisReturnNetBufferLists