Bagikan melalui


Menggunakan Pemfilteran Lapisan 2

Pemfilteran Lapisan 2 didukung di versi Windows Windows 8 dan yang lebih baru.

Fitur WFP ini memungkinkan pemfilteran pada bidang header MAC lapisan 2. Lapisan-lapisan ini dipanggil per paket untuk semua paket yang dikirim atau diterima oleh komputer host. Lapisan dipanggil sebelum rakitan ulang paket pada jalur masuk dan setelah fragmentasi paket pada jalur keluar. Lapisan ini diakses dari driver filter ringan (LWF) NDIS.

Catatan

Callout tidak boleh menyuntikkan paket pada lapisan jika belum memiliki filter yang sesuai pada lapisan tersebut. Injeksi struktur NET_BUFFER_LIST harus dikoordinasikan dengan penambahan dan penghapusan filter sehingga injeksi hanya dilakukan ketika filter ada di lapisan yang sesuai. Selain itu, penyedia tidak boleh menghapus filter milik penyedia lain. 

Bagian ini mencakup topik-topik berikut:

Menyuntikkan Bingkai MAC

Driver panggilan balik memanggil fungsi FwpsInjectMacReceiveAsync0 untuk memasukkan kembali bingkai MAC yang diserap sebelumnya (atau kloning bingkai) kembali ke jalur data masuk lapisan 2 yang dicegatnya, atau untuk menyuntikkan bingkai MAC yang ditemukan di jalur data masuk.

Driver panggilan balik memanggil fungsi FwpsInjectMacSendAsync0 untuk memasukkan kembali bingkai MAC yang diserap sebelumnya (atau klon bingkai) kembali ke jalur data keluar lapisan 2 yang disadapnya, atau untuk menyuntikkan bingkai MAC yang ditemukan di jalur data keluar.

Parameter netBufferLists dapat menjadi rantai NET_BUFFER_LIST . Namun fungsi penyelesaian dapat dipanggil beberapa kali masing-masing, menyelesaikan segmen (atau NET_BUFFER_LIST tunggal) rantai.

Bingkai yang disuntikkan bisa diklasifikasikan lagi jika paket cocok dengan filter yang sama seperti yang awalnya diklasifikasikan. Oleh karena itu, seperti halnya callout pada lapisan IP, callout lapisan 2 juga harus melindungi dari inspeksi paket tak terbatas dengan memanggil FwpsQueryPacketInjectionState0.

Selain itu, Anda harus memiliki callout di lapisan tempat Anda menyuntikkan. Jika tidak, NET_BUFFER_LIST yang Disuntikkan tidak akan diselesaikan ke fungsi penyelesaian Anda, dan NET_BUFFER_LIST akan menaikkan tumpukan lebih jauh. Dalam hal ini, perilaku tidak terdefinisi, karena NDIS akan mencoba meneruskan NET_BUFFER_LIST yang disuntikkan ke komponen berikutnya dalam tumpukan.

Anggota Status NET_BUFFER_LIST berisi hasil status injeksi tumpukan. Hasil status injeksi tumpukan adalah status yang dimasukkan tumpukan ke dalam NET_BUFFER_LIST setelah fungsi injeksi WFP mengembalikan STATUS_SUCCESS. Anda harus menggunakan makro NT_SUCCESS untuk memeriksa status injeksi tumpukan di anggota Status . Jika nilai StatusSTATUS_SUCCESS, injeksi berhasil tanpa informasi lebih lanjut. Nilai anggota status yang lebih besar dari STATUS_SUCCESS berarti bahwa injeksi berhasil, tetapi mungkin ada informasi lebih lanjut tentang injeksi yang harus dipertimbangkan. Nilai anggota status yang kurang dari STATUS_SUCCESS berarti bahwa injeksi gagal karena alasan yang ditentukan dalam anggota Status .

Mengklasifikasikan Daftar Buffer Jaringan Berantai

Secara default, driver callout hanya dapat mengklasifikasikan daftar buffer jaringan satu per satu. Namun, driver callout dapat mengklasifikasikan NET_BUFFER_LIST rantai untuk performa yang lebih baik, jika melakukan kedua hal berikut:

Peringatan

Namun, jika driver callout mengatur bendera FWP_CALLOUT_FLAG_ALLOW_L2_BATCH_CLASSIFY , driver tersebut tidak dapat menggunakan fungsi berikut untuk memodifikasi NET_BUFFER_LISTs.

Dengan set bendera ini, FwpsAllocateCloneNetBufferList0 akan selalu mengembalikan kesalahan INVALID_PARAMETER . Ini mungkin secara tak terduga menyebabkan driver callout pihak ke-3 gagal mengelola jumlah referensi NET_BUFFER_LISTs, menyebabkan operasi kirim dan terima berhenti.

Lapisan dan Bidang Lapisan WFP 2

Pengidentifikasi Lapisan Pemfilteran Run-time untuk pemfilteran sakelar virtual meliputi:

FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET

FWPS_LAYER_OUTBOUND_MAC_FRAME_ETHERNET

FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE

FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE

Pengidentifikasi Bidang Data untuk pemfilteran sakelar virtual meliputi:

FWPS_FIELDS_INBOUND_MAC_FRAME_ETHERNET

FWPS_FIELDS_OUTBOUND_MAC_FRAME_ETHERNET

FWPS_FIELDS_INBOUND_MAC_FRAME_NATIVE

FWPS_FIELDS_OUTBOUND_MAC_FRAME_NATIVE