Fungsi FwpmFilterAdd0 (fwpmu.h)
Fungsi FwpmFilterAdd0 menambahkan objek filter baru ke sistem.
Sintaks
DWORD FwpmFilterAdd0(
[in] HANDLE engineHandle,
[in] const FWPM_FILTER0 *filter,
[in, optional] PSECURITY_DESCRIPTOR sd,
[out, optional] UINT64 *id
);
Parameter
[in] engineHandle
Jenis: HANDEL
Menangani sesi terbuka ke mesin filter. Panggil FwpmEngineOpen0 untuk membuka sesi ke mesin filter.
[in] filter
Jenis: FWPM_FILTER0*
Objek filter yang akan ditambahkan.
[in, optional] sd
Jenis: SECURITY_DESCRIPTOR
Informasi keamanan tentang objek filter.
[out, optional] id
Jenis: UINT64*
Pengidentifikasi runtime untuk filter ini.
Mengembalikan nilai
Jenis: DWORD
Mengembalikan kode/nilai | Deskripsi |
---|---|
ERROR_SUCCESS 0 |
Filter berhasil ditambahkan. |
ERROR_INVALID_SECURITY_DESCR 0x8007053A |
Struktur deskriptor keamanan tidak valid. Atau, kondisi filter berisi deskriptor keamanan dalam format absolut. |
FWP_E_CALLOUT_NOTIFICATION_FAILED 0x80320037 |
Pemanggil menambahkan filter callout dan callout mengembalikan kesalahan dari rutinitas pemberitahuannya. |
kode kesalahan FWP_E_* 0x80320001—0x80320039 |
Kesalahan spesifik Windows Filtering Platform (WFP). Lihat Kode Kesalahan WFP untuk detailnya. |
RPC_* kode kesalahan 0x80010001—0x80010122 |
Gagal berkomunikasi dengan mesin firewall jarak jauh atau lokal. |
Keterangan
FwpmFilterAdd0 menambahkan filter ke sub-lapisan yang ditentukan di setiap lapisan pemfilteran dalam sistem.
Beberapa bidang dalam struktur FWPM_FILTER0 ditetapkan oleh sistem, bukan pemanggil, dan diabaikan dalam panggilan ke FwpmFilterAdd0.
Jika penelepon menyediakan deskriptor keamanan NULL , sistem akan menetapkan pendeskripsi keamanan default.
Untuk memblokir koneksi ke lokasi tertentu, tambahkan filter FWP_ACTION_BLOCK yang menentukan alamat lokal di lapisan FWPM_LAYER_ALE_AUTH_CONNECT_V* , atau tambahkan filter FWP_ACTION_BLOCK tanpa menentukan alamat lokal di lapisan FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*.
Catatan
Jika alamat lokal ditentukan pada lapisan penetapan sumber daya, ikatan implisit akan berhasil karena alamat, jenis alamat, dan port dapat kembali sebagai FWP_EMPTY.
Struktur FWPM_FILTER0 dapat memberi label filter sebagai filter boot-time atau persisten. Filter waktu boot ditambahkan ke Mesin Pemfilteran Dasar (BFE) saat driver TCP/IP dimulai, dan dihapus setelah BFE menyelesaikan inisialisasi. Objek persisten ditambahkan saat BFE dimulai.
Fungsi ini tidak dapat dipanggil dari dalam transaksi baca-saja. Ini akan gagal dengan FWP_E_INCOMPATIBLE_TXN. Lihat Manajemen Objek untuk informasi selengkapnya tentang transaksi.
Pemanggil memerlukan hak akses berikut:
- FWPM_ACTRL_ADD akses ke kontainer filter
- FWPM_ACTRL_ADD_LINK akses ke penyedia (jika ada)
- FWPM_ACTRL_ADD_LINK akses ke lapisan yang berlaku
- FWPM_ACTRL_ADD_LINK akses ke sub-lapisan yang berlaku
- FWPM_ACTRL_ADD_LINK akses ke callout (jika ada)
- FWPM_ACTRL_ADD_LINK akses ke konteks penyedia (jika ada).
Lihat Access Control untuk informasi selengkapnya.
Untuk menambahkan filter yang mereferensikan callout, panggil fungsi dalam urutan berikut.
- Panggil FwpsCalloutRegister0 (didokumenkan dalam Windows Driver Kit (WDK)), untuk mendaftarkan callout dengan mesin filter.
- Panggil FwpmCalloutAdd0 untuk menambahkan callout ke sistem.
- Panggil FwpmFilterAdd0 untuk menambahkan filter yang mereferensikan callout ke sistem.
Secara default filter yang mereferensikan callout yang telah ditambahkan tetapi belum terdaftar di mesin filter diperlakukan sebagai filter Blokir.
FwpmFilterAdd0 adalah implementasi khusus dari FwpmFilterAdd. Lihat Nama Version-Independent WFP dan Menargetkan Versi Windows Tertentu untuk informasi selengkapnya.
Contoh
Contoh C++ berikut menunjukkan cara menginisialisasi dan menambahkan filter menggunakan FwpmFilterAdd0 yang
secara khusus memblokir lalu lintas pada IP V4 untuk semua aplikasi.
// Add filter to block traffic on IP V4 for all applications.
//
FWPM_FILTER0 fwpFilter;
FWPM_SUBLAYER0 fwpFilterSubLayer;
RtlZeroMemory(&fwpFilter, sizeof(FWPM_FILTER0));
fwpFilter.layerKey = FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4;
fwpFilter.action.type = FWP_ACTION_BLOCK;
if (&fwpFilterSubLayer.subLayerKey != NULL)
fwpFilter.subLayerKey = fwpFilterSubLayer.subLayerKey;
fwpFilter.weight.type = FWP_EMPTY; // auto-weight.
fwpFilter.numFilterConditions = 0; // this applies to all application traffic
fwpFilter.displayData.name = L"Receive/Accept Layer Block";
fwpFilter.displayData.description = L"Filter to block all inbound connections.";
printf("Adding filter to block all inbound connections.\n");
result = FwpmFilterAdd0(engineHandle, &fwpFilter, NULL, NULL);
if (result != ERROR_SUCCESS)
printf("FwpmFilterAdd0 failed. Return value: %d.\n", result);
else
printf("Filter added successfully.\n");
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | fwpmu.h |
Pustaka | Fwpuclnt.lib |
DLL | Fwpuclnt.dll |