FILTER_RECEIVE_NET_BUFFER_LISTS fungsi panggilan balik (ndis.h)

NDIS memanggil fungsi FilterReceiveNetBufferLists untuk meminta driver filter untuk memproses indikasi terima.

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

Sintaks

FILTER_RECEIVE_NET_BUFFER_LISTS FilterReceiveNetBufferLists;

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

Parameter

[in] FilterModuleContext

Handel ke area konteks untuk modul filter. Driver filter membuat dan menginisialisasi area konteks ini dalam fungsi FilterAttach .

[in] NetBufferLists

Daftar tertaut struktur NET_BUFFER_LIST yang dialokasikan oleh driver yang mendasar. Setiap struktur NET_BUFFER_LIST berisi satu struktur NET_BUFFER .

[in] PortNumber

Nomor port yang mengidentifikasi port adaptor miniport. Nomor port adaptor miniport ditetapkan dengan memanggil fungsi NdisMAllocatePort . Nilai nol mengidentifikasi port default adaptor miniport.

[in] NumberOfNetBufferLists

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

[in] ReceiveFlags

Bendera yang menentukan atribut untuk indikasi terima. 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 FilterReceiveNetBufferLists 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 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 dalam anggota Bendera dari 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.

NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE

Jika bendera ini diatur, semua paket dalam daftar tertaut struktur NET_BUFFER_LIST berasal dari port sumber sakelar hyper-V yang dapat diperluas yang sama.

Untuk informasi selengkapnya, lihat Bendera Kirim dan Terima Sakelar Yang Dapat Diperluas Hyper-V.

Catatan Jika setiap paket dalam daftar tertaut struktur NET_BUFFER_LIST menggunakan port sumber yang sama, ekstensi harus mengatur bendera NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE dalam parameter ReturnFlagsfilterReturnNetBufferLists saat permintaan penerima selesai. Ekstensi harus mengatur bendera ini dalam parameter ReturnFlags jika memanggil NdisFReturnNetBufferLists untuk mengembalikan paket yang tidak berasal atau kloning.
 

NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP

Jika bendera ini diatur, semua paket dalam daftar tertaut struktur NET_BUFFER_LIST akan diteruskan ke port tujuan switch yang dapat diperluas yang sama.

Untuk informasi selengkapnya, lihat Bendera Kirim dan Terima Sakelar Yang Dapat Diperluas Hyper-V.

Catatan Jika setiap paket dalam daftar tertaut struktur NET_BUFFER_LIST menggunakan port tujuan yang sama, ekstensi harus mengatur bendera NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP dalam parameter ReturnFlagsfilterReturnNetBufferLists saat permintaan penerima selesai. Ekstensi harus mengatur bendera ini dalam parameter ReturnFlags jika memanggil NdisFReturnNetBufferLists untuk mengembalikan paket yang tidak berasal atau kloning.
 

Mengembalikan nilai

Tidak ada

Keterangan

FilterReceiveNetBufferLists adalah fungsi opsional. Jika driver filter tidak memfilter menerima indikasi, itu dapat mengatur titik masuk untuk fungsi ini ke NULL ketika memanggil Fungsi NdisFRegisterFilterDriver .

Catatan Driver filter yang menyediakan fungsi FilterReceiveNetBufferLists harus menyediakan fungsi FilterStatus .
 
Driver filter dapat memanggil fungsi NdisSetOptionalHandlers , dari fungsi FilterSetModuleOptions , untuk menentukan fungsi FilterReceiveNetBufferLists untuk modul filter.

NDIS memanggil FilterReceiveNetBufferLists untuk memproses menerima indikasi yang dimulai oleh driver yang mendasar. NDIS juga dapat memanggil fungsi ini sebagai akibat dari loopback.

Jika driver filter tidak menentukan fungsi FilterReceiveNetBufferLists , NDIS memanggil driver filter yang lebih tinggi berikutnya di tumpukan yang menentukan fungsi FilterReceiveNetBufferLists . Jika tidak ada driver filter seperti itu, NDIS memanggil driver yang terlalu berlebihan Fungsi ProtocolReceiveNetBufferLists .

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

Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES dalam parameter ReceiveFlags diatur, driver filter tidak dapat menyimpan struktur NET_BUFFER_LIST dan sumber daya yang dialokasikan driver yang mendasar terkait. Bendera ini dapat menunjukkan bahwa driver yang mendasar hampir kehabisan sumber daya penerima. Fungsi FilterReceiveNetBufferLists harus kembali secepat mungkin. Sebelum kembali, fungsi FilterReceiveNetBufferLists dapat menyalin data yang diterima ke penyimpanan yang dialokasikan filter-driver atau meneruskan buffer dengan memanggil Fungsi NdisFIndicateReceiveNetBufferLists .

Catatan Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES diatur, driver filter 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.
 
Driver filter dapat memfilter data yang diterima sebelum menunjukkan data ke driver yang terlalu berlebihan. Untuk setiap buffer yang dikirimkan ke fungsi FilterReceiveNetBufferLists , driver filter dapat melakukan hal berikut:
  • Teruskan buffer ke driver overlying berikutnya dengan memanggil Fungsi NdisFIndicateReceiveNetBufferLists .

    Driver dapat memodifikasi konten buffer sebelum memanggil NdisFIndicateReceiveNetBufferLists.

    Driver dapat mengubah pengaturan bendera NDIS_RECEIVE_FLAGS_RESOURCES yang diteruskan NDIS ke FilterReceiveNetBufferLists atau hanya meneruskannya ke NdisFIndicateReceiveNetBufferLists.

  • Buang buffer. Jika NDIS menghapus bendera NDIS_RECEIVE_FLAGS_RESOURCES , panggil fungsi NdisFReturnNetBufferLists untuk membuang buffer. Jika NDIS mengatur bendera NDIS_RECEIVE_FLAGS_RESOURCES , jangan ambil tindakan dan kembali dari FilterReceiveNetBufferLists untuk membuang buffer.
  • Antrekan buffer dalam struktur data lokal untuk diproses nanti. Jika NDIS mengatur bendera NDIS_RECEIVE_FLAGS_RESOURCESFilterReceiveNetBufferLists, driver filter harus membuat salinan sebelum kembali dari FilterReceiveNetBufferLists.
  • Salin buffer dan asal indikasi terima dengan salinan. Indikasi terima mirip dengan indikasi penerimaan filter-driver-initiated. Dalam hal ini, driver harus mengembalikan buffer asli ke driver yang mendasar.
Jika driver filter yang disebut NdisFIndicateReceiveNetBufferLists dan tidak mengatur bendera NDIS_RECEIVE_FLAGS_RESOURCES , NDIS akan memanggil Fungsi FilterReturnNetBufferLists untuk modul filter. Dalam fungsi FilterReturnNetBufferLists , driver filter akan membatalkan operasi yang dilakukannya pada buffer pada jalur indikasi terima.

Jika modul filter dalam status Dijeda , driver filter tidak boleh berasal dari indikasi terima untuk modul filter tersebut. Driver filter tidak boleh melewati buffer yang dibuat ke NdisFIndicateReceiveNetBufferLists. Namun, pengemudi dapat meneruskan indikasi terima dari pengemudi yang mendasar.

NDIS memanggil FilterReceiveNetBufferLists di IRQL <= DISPATCH_LEVEL.

Contoh

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

FILTER_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;

Kemudian, terapkan fungsi Anda sebagai berikut:

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

Jenis fungsi FILTER_RECEIVE_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 FILTER_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

FilterAttach

FilterReturnNetBufferLists

FilterSetModuleOptions

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisFIndicateReceiveNetBufferLists

NdisFRegisterFilterDriver

NdisFReturnNetBufferLists

NdisMAllocatePort

NdisSetOptionalHandlers

ProtocolReceiveNetBufferLists