Menggunakan Callout untuk Inspeksi Mendalam
Saat callout melakukan inspeksi mendalam, fungsi callout classifyFn-nya dapat memeriksa kombinasi bidang data tetap, bidang metadata, dan data paket mentah apa pun yang diteruskan ke dalamnya, dan data relevan apa pun yang telah disimpan dalam konteks yang terkait dengan filter atau aliran data.
Contohnya:
// classifyFn callout function
VOID NTAPI
ClassifyFn(
IN const FWPS_INCOMING_VALUES0 *inFixedValues,
IN const FWPS_INCOMING_METADATA_VALUES0 *inMetaValues,
IN OUT VOID *layerData,
IN const FWPS_FILTER0 *filter,
IN UINT64 flowContext,
IN OUT FWPS_CLASSIFY_OUT *classifyOut
)
{
PNET_BUFFER_LIST rawData;
...
// Test for the FWPS_RIGHT_ACTION_WRITE flag to check the rights
// for this callout to return an action. If this flag is not set,
// a callout can still return a BLOCK action in order to VETO a
// PERMIT action that was returned by a previous filter. In this
// example the function just exits if the flag is not set.
if (!(classifyOut->rights & FWPS_RIGHT_ACTION_WRITE))
{
// Return without specifying an action
return;
}
// Get the data fields from inFixedValues
...
// Get any metadata fields from inMetaValues
...
// Get the pointer to the raw data
rawData = (PNET_BUFFER_LIST)layerData;
// Get any filter context data from filter->context
...
// Get any flow context data from flowContext
...
// Inspect the various data sources to determine
// the action to be taken on the data
...
// If the data should be permitted...
if (...) {
// Set the action to permit the data
classifyOut->actionType = FWP_ACTION_PERMIT;
// Check whether the FWPS_RIGHT_ACTION_WRITE flag should be cleared
if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT)
{
// Clear the FWPS_RIGHT_ACTION_WRITE flag
classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE;
}
return;
}
...
// If the data should be blocked...
if (...) {
// Set the action to block the data
classifyOut->actionType = FWP_ACTION_BLOCK;
// Clear the FWPS_RIGHT_ACTION_WRITE flag
classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE;
return;
}
...
// If the decision to permit or block should be passed
// to the next filter in the filter engine...
if (...) {
// Set the action to continue with the next filter
classifyOut->actionType = FWP_ACTION_CONTINUE;
return;
}
...
}
Nilai dalam filter-action.type> menentukan tindakan mana yang harus dikembalikan oleh fungsi callout classifyFn callout dalam anggota actionType struktur yang diacu oleh parameter classifyOut. Untuk informasi selengkapnya tentang tindakan ini, lihat struktur FWPS_ACTION0 .
Jika callout harus melakukan pemrosesan tambahan data paket di luar fungsi callout classifyFn sebelum dapat menentukan apakah data harus diizinkan atau diblokir, data harus menunggu data paket hingga pemrosesan data selesai. Untuk informasi tentang cara menunggu data paket, lihat Jenis Callout dan FwpsPendOperation0.
Pada beberapa lapisan pemfilteran, parameter layerData yang diteruskan oleh mesin filter ke fungsi callout classifyFn callout adalah NULL.
Untuk informasi tentang cara melakukan inspeksi mendalam data aliran, lihat Menggunakan Callout untuk Inspeksi Mendalam Data Aliran.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk