FILTER_SEND_NET_BUFFER_LISTS fungsi panggilan balik (ndis.h)

NDIS memanggil fungsi FilterSendNetBufferLists untuk memungkinkan driver filter memfilter daftar struktur NET_BUFFER_LIST yang ditautkan.

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

Sintaks

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

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

Parameter

[in] FilterModuleContext

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

NetBufferList

Penunjuk ke daftar struktur NET_BUFFER_LIST tertaut yang menentukan daftar struktur NET_BUFFER . Setiap NET_BUFFER dalam daftar memetakan rantai MDL yang berisi data pengiriman.

[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] 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 penerima 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.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

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

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

Catatan Jika setiap paket dalam daftar struktur NET_BUFFER_LIST yang ditautkan menggunakan port sumber yang sama, ekstensi harus mengatur bendera NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE di parameter SendCompleteFlagsdari NdisFSendNetBufferListsComplete saat menyelesaikan permintaan kirim.
 
Catatan Bendera ini tersedia di NDIS 6.30 dan yang lebih baru.
 

NDIS_SEND_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 Bendera ini tersedia di NDIS 6.30 dan yang lebih baru.
 

Nilai kembali

Tidak ada

Keterangan

FilterSendNetBufferLists adalah fungsi opsional. Jika driver filter tidak memfilter permintaan pengiriman, itu dapat mengatur titik masuk untuk fungsi ini ke NULL ketika memanggil Fungsi NdisFRegisterFilterDriver .

Jika driver filter menentukan fungsi FilterSendNetBufferLists dan mengantre mengirim permintaan, itu juga harus menentukan Fungsi FilterCancelSendNetBufferLists .

Driver filter dapat memanggil fungsi NdisSetOptionalHandlers , dari fungsi FilterSetModuleOptions , untuk menentukan fungsi FilterSendNetBufferLists untuk modul filter.

Jika driver filter menentukan fungsi FilterSendNetBufferLists , NDIS memanggil fungsi ini untuk memfilter data yang terkandung dalam daftar struktur NET_BUFFER melalui jaringan. NDIS menentukan daftar struktur NET_BUFFER di setiap struktur NET_BUFFER_LIST .

Jika driver filter tidak menentukan FilterSendNetBufferLists, NDIS memanggil driver filter berikutnya yang lebih rendah di tumpukan driver yang menentukan fungsi FilterSendNetBufferLists . Jika tidak ada driver filter yang mendasar seperti itu, NDIS memanggil driver yang mendasar Fungsi MiniportSendNetBufferLists .

Driver filter dapat memfilter data dan mengirim data yang difilter ke driver yang mendasar. Untuk setiap struktur NET_BUFFER yang dikirimkan ke FilterSendNetBufferLists, driver filter dapat melakukan hal berikut:

  • Teruskan buffer ke driver yang mendasar berikutnya dengan memanggil fungsi NdisFSendNetBufferLists . Driver filter dapat mengubah konten buffer sebelum memanggil NdisFSendNetBufferLists. Dalam hal ini NDIS memanggil Fungsi FilterSendNetBufferListsComplete setelah driver yang mendasar menyelesaikan permintaan pengiriman.
  • Tolak buffer dengan memanggil fungsi NdisFSendNetBufferListsComplete .
  • Antrekan buffer dalam struktur data lokal untuk diproses nanti.
  • Salin buffer dan asal permintaan kirim dengan salinan. Operasi pengiriman mirip dengan permintaan pengiriman yang dimulai oleh filter-driver. Dalam hal ini, driver harus mengembalikan buffer asli ke driver yang terlalu berlebihan dengan memanggil fungsi NdisFSendNetBufferListsComplete .
Setelah operasi pengiriman selesai, driver filter membalikkan modifikasi, jika ada, ke deskriptor buffer yang dibuat dalam fungsi FilterSendNetBufferLists . Driver memanggil fungsi NdisFSendNetBufferListsComplete untuk mengembalikan daftar struktur NET_BUFFER_LIST yang ditautkan ke driver yang terlalu berlebihan dan untuk mengembalikan status akhir permintaan pengiriman.

Jika modul filter dalam status Dijeda , driver filter tidak boleh berasal dari permintaan pengiriman apa pun untuk modul filter tersebut. Jika NDIS memanggil FilterSendNetBufferLists, driver tidak boleh memanggil NdisFSendNetBufferLists untuk meneruskan data hingga driver dimulai ulang. Driver harus segera memanggil NdisFSendNetBufferListsComplete untuk menyelesaikan operasi pengiriman. Ini harus mengatur status lengkap di setiap struktur NET_BUFFER_LIST ke NDIS_STATUS_PAUSED.

NDIS memanggil FilterSendNetBufferLists di IRQL <= DISPATCH_LEVEL.

Contoh

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

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Kemudian, terapkan fungsi Anda sebagai berikut:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

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

Lihat juga

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry