FwpmFilterAdd0-Funktion (fwpmk.h)
Die FwpmFilterAdd0-Funktion fügt dem System ein neues Filterobjekt hinzu.
Syntax
NTSTATUS FwpmFilterAdd0(
[in] HANDLE engineHandle,
[in] const FWPM_FILTER0 *filter,
[in, optional] PSECURITY_DESCRIPTOR sd,
[out, optional] UINT64 *id
);
Parameter
[in] engineHandle
Behandeln einer geöffneten Sitzung für das Filtermodul. Rufen Sie FwpmEngineOpen0- auf, um eine Sitzung für das Filtermodul zu öffnen.
[in] filter
Das hinzuzufügende Filterobjekt.
[in, optional] sd
Sicherheitsinformationen zum Filterobjekt.
[out, optional] id
Der Laufzeitbezeichner für diesen Filter.
Rückgabewert
Zurückgeben von Code/Wert | Beschreibung |
---|---|
ERROR_SUCCESS 0 |
Der Filter wurde erfolgreich hinzugefügt. |
ERROR_INVALID_SECURITY_DESCR 0x8007053A |
Die Sicherheitsbeschreibungsstruktur ist ungültig. Oder eine Filterbedingung enthält einen Sicherheitsdeskriptor im absoluten Format. |
FWP_E_CALLOUT_NOTIFICATION_FAILED 0x80320037 |
Der Aufrufer hat einen Popupfilter hinzugefügt, und die Legende hat einen Fehler aus der Benachrichtigungsroutine zurückgegeben. |
FWP_E_* Fehlercode 0x80320001 – 0x80320039 |
Ein WFP-spezifischer Fehler (Windows-Filterplattform). Weitere Informationen finden Sie unter WFP-Fehlercodes. |
fehlercode RPC_* 0x80010001 – 0x80010122 |
Fehler bei der Kommunikation mit dem Remote- oder lokalen Firewallmodul. |
Andere NTSTATUS-Codes | Fehler. |
Bemerkungen
FwpmFilterAdd0 fügt den Filter auf jeder Filterebene im System zur angegebenen Unterebene hinzu.
Einige Felder in der FWPM_FILTER0-Struktur werden vom System, nicht vom Aufrufer zugewiesen und im Aufruf von FwpmFilterAdd0ignoriert.
Wenn der Aufrufer einen NULL- Sicherheitsdeskriptor bereitstellt, weist das System einen Standardsicherheitsdeskriptor zu.
Um Verbindungen mit bestimmten Speicherorten zu blockieren, fügen Sie einen FWP_ACTION_BLOCK Filter hinzu, der die lokale Adresse auf der FWPM_LAYER_ALE_AUTH_CONNECT_V* Ebene angibt, oder fügen Sie einen FWP_ACTION_BLOCK Filter hinzu, ohne die lokale Adresse auf der ebene FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V* anzugeben.
Wenn eine lokale Adresse auf der Ressourcenzuordnungsebene angegeben wird, würde eine implizite Bindung erfolgreich sein, da Adresse, Adresstyp und Port möglicherweise als FWP_EMPTYzurückkommen.
Die FWPM_FILTER0 Struktur kann einen Filter als Startzeit- oder beständigen Filter bezeichnen. Startzeitfilter werden dem Basisfiltermodul (Base Filtering Engine, BFE) hinzugefügt, wenn der TCP/IP-Treiber gestartet wird und nach Abschluss der BFE-Initialisierung entfernt wird. Persistente Objekte werden hinzugefügt, wenn das BFE gestartet wird.
Diese Funktion kann nicht innerhalb einer schreibgeschützten Transaktion aufgerufen werden, sie schlägt mit FWP_E_INCOMPATIBLE_TXNfehl. Weitere Informationen zu Transaktionen finden Sie unter Objektverwaltung.
Der Anrufer benötigt die folgenden Zugriffsrechte:
- FWPM_ACTRL_ADD Zugriff auf den Container des Filters
- FWPM_ACTRL_ADD_LINK Zugriff auf den Anbieter (falls vorhanden)
- FWPM_ACTRL_ADD_LINK Zugriff auf die anwendbare Ebene
- FWPM_ACTRL_ADD_LINK Zugriff auf die anwendbare Unterebene
- FWPM_ACTRL_ADD_LINK Zugriff auf die Legende (falls vorhanden)
- FWPM_ACTRL_ADD_LINK Zugriff auf den Anbieterkontext (falls vorhanden).
Weitere Informationen finden Sie unter Zugriffssteuerungs-.
Um einen Filter hinzuzufügen, der auf eine Legende verweist, rufen Sie die Funktionen in der folgenden Reihenfolge auf.
- Rufen Sie FwpsCalloutRegister0 (dokumentiert im Windows Driver Kit (WDK)) auf, um die Legende mit dem Filtermodul zu registrieren.
- Rufen Sie FwpmCalloutAdd0- auf, um die Legende zum System hinzuzufügen.
- Rufen Sie FwpmFilterAdd0- auf, um den Filter hinzuzufügen, der auf die Legende des Systems verweist.
Standardmäßig werden Filter, die auf Legenden verweisen, die hinzugefügt, aber noch nicht beim Filtermodul registriert wurden, als Blockfilter behandelt.
FwpmFilterAdd0 ist eine spezifische Implementierung von FwpmFilterAdd. Weitere Informationen finden Sie unter WFP-Version-Independent Namen und zielspezifische Versionen von Windows.
Beispiele
Das folgende C++-Beispiel zeigt, wie Sie einen Filter mithilfe von FwpmFilterAdd0- initialisieren und hinzufügen, der den Datenverkehr für alle Anwendungen speziell blockiert.
// 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");
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar ab Windows Vista. |
Zielplattform- | Universal |
Header- | fwpmk.h |
Library | fwpkclnt.lib |
IRQL- | <= PASSIVE_LEVEL |