Bagikan melalui


Menggunakan Penandaan Paket

Driver callout dapat menandai paket yang menarik dan menerima pemberitahuan peristiwa yang terjadi pada paket yang diberi tag. Pemberian tag paket didukung di Windows 7 dan versi Windows yang lebih baru.

Untuk menggunakan pemberian tag paket, driver callout harus menerapkan fungsi panggilan balik FWPS_NET_BUFFER_LIST_NOTIFY_FN0 atau FWPS_NET_BUFFER_LIST_NOTIFY_FN1 . Fungsi ini akan menerima semua pemberitahuan status untuk paket yang diberi tag. Sebelum paket individual dapat ditandai, driver callout harus mendapatkan tag konteks khusus dengan memanggil FwpsNetBufferListGetTagForContext0. Driver callout dapat menggunakan tag konteks yang sama untuk beberapa atau semua paket yang diberi tag. Misalnya, driver callout mungkin membedakan antara jenis paket yang diberi tag dengan menggunakan tag konteks yang berbeda.

Untuk menandai paket, driver callout menggunakan struktur NET_BUFFER_LIST . Driver callout melakukan panggilan ke FwpsNetBufferListAssociateContext0 untuk menandai struktur NET_BUFFER_LIST individual. Konteks yang terkait dengan driver callout dengan paket adalah nilai 64-bit yang tidak ditandatangani secara arbitrer. Saat peristiwa dipicu, panggilan balik FWPS_NET_BUFFER_LIST_NOTIFY_FN0 atau FWPS_NET_BUFFER_LIST_NOTIFY_FN1 meneruskan konteks sebagai parameter input sehingga driver callout dapat mengidentifikasi paket yang diberi tag individual. Konteks tidak digunakan atau dievaluasi oleh mesin pemfilteran. Ini hanya diteruskan ke panggilan balik untuk digunakan oleh driver callout.

Konteks dihapus dari paket yang diberi tag secara otomatis saat paket meninggalkan tumpukan. Namun, jika paket tidak pernah memasuki tumpukan TCP/IP — misalnya, dalam kasus driver filter NDIS - konteks harus dihapus secara manual dengan memanggil FwpsNetBufferListRemoveContext0 dengan parameter netBufferList diatur ke NULL.

Jika callout perlu membatalkan operasi pemberian tag lebih awal, konteks dapat dihapus dengan memanggil FwpsNetBufferListRemoveContext0. Menghapus konteks umumnya memicu peristiwa FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED . Untuk informasi selengkapnya tentang peristiwa yang dapat dipicu, lihat enumerasi FWPS_NET_BUFFER_LIST_EVENT_TYPE0 . Dalam beberapa kasus, tidak ada peristiwa yang akan dipicu, seperti ketika paket tidak pernah memasuki tumpukan TCP/IP untuk diproses.

Ketika paket yang ditandai dikloning, driver callout dapat memindahkan atau menyalin konteks ke paket kloning. Untuk memindahkan konteks (dalam kasus kloning), driver callout harus memanggil FwpsNetBufferListRetrieveContext0 dengan parameter removeContext diatur ke TRUE. Kemudian konteks dapat dikaitkan dengan paket baru. Proses untuk menyalin konteks (dalam kasus duplikasi) sama kecuali bahwa parameter removeContext dari FwpsNetBufferListRetrieveContext0 harus diatur ke FALSE.

Paket yang ditandai dari lapisan TCP/IP dapat diambil dari driver filter NDIS. Begitu pula sebaliknya. Pemberian tag paket tidak tersedia dari lapisan aliran di mana tidak ada paket yang ditunjukkan kecuali segmen data.

Driver callout dapat mengambil konteks untuk paket di luar fungsi FWPS_NET_BUFFER_LIST_NOTIFY_FN0 atau FWPS_NET_BUFFER_LIST_NOTIFY_FN1 dengan memanggil FwpsNetBufferListRetrieveContext0. Biasanya, driver callout akan mengambil konteks dalam panggilan balik classifyFn-nya .

classifyFn

FWPS_NET_BUFFER_LIST_EVENT_TYPE0

FWPS_NET_BUFFER_LIST_NOTIFY_FN0

FWPS_NET_BUFFER_LIST_NOTIFY_FN1

FwpsNetBufferListAssociateContext0

FwpsNetBufferListGetTagForContext0

FwpsNetBufferListRemoveContext0

FwpsNetBufferListRetrieveContext0

NET_BUFFER_LIST

Driver Filter NDIS