Freigeben über


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:

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

Siehe auch