Freigeben über


FwpmFilterAdd0-Funktion (fwpmu.h)

Die FwpmFilterAdd0-Funktion fügt dem System ein neues Filterobjekt hinzu.

Syntax

DWORD FwpmFilterAdd0(
  [in]            HANDLE               engineHandle,
  [in]            const FWPM_FILTER0   *filter,
  [in, optional]  PSECURITY_DESCRIPTOR sd,
  [out, optional] UINT64               *id
);

Parameter

[in] engineHandle

Typ: HANDLE

Handle für eine geöffnete Sitzung für die Filter-Engine. Rufen Sie FwpmEngineOpen0 auf, um eine Sitzung für die Filter-Engine zu öffnen.

[in] filter

Typ: FWPM_FILTER0*

Das hinzuzufügende Filterobjekt.

[in, optional] sd

Typ: SECURITY_DESCRIPTOR

Sicherheitsinformationen zum Filterobjekt.

[out, optional] id

Typ: UINT64*

Der Laufzeitbezeichner für diesen Filter.

Rückgabewert

Art: DWORD

Rückgabecode/-wert BESCHREIBUNG
ERROR_SUCCESS
0
Der Filter wurde erfolgreich hinzugefügt.
ERROR_INVALID_SECURITY_DESCR
0x8007053A
Die Struktur der Sicherheitsbeschreibung ist ungültig. Oder eine Filterbedingung enthält einen Sicherheitsdeskriptor im absoluten Format.
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
Der Aufrufer hat einen Legendenfilter hinzugefügt, und die Legende hat einen Fehler aus der Benachrichtigungsroutine zurückgegeben.
FWP_E_*-Fehlercode
0x80320001 – 0x80320039
Ein WFP-spezifischer Fehler (Windows Filtering Platform). Weitere Informationen finden Sie unter WFP-Fehlercodes .
RPC_*-Fehlercode
0x80010001 – 0x80010122
Fehler bei der Kommunikation mit der Remote- oder lokalen Firewall-Engine.

Hinweise

FwpmFilterAdd0 fügt den Filter der angegebenen Unterebene auf jeder Filterebene im System hinzu.

Einige Felder in der FWPM_FILTER0-Struktur werden vom System und nicht vom Aufrufer zugewiesen und beim Aufruf von FwpmFilterAdd0 ignoriert.

Wenn der Aufrufer einen NULL-Sicherheitsdeskriptor bereitstellt, weist das System einen Standardsicherheitsdeskriptor zu.

Um Verbindungen mit bestimmten Standorten 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 FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*-Ebene anzugeben.

Hinweis

Wenn auf der Ressourcenzuweisungsebene eine lokale Adresse angegeben wird, wäre eine implizite Bindung erfolgreich, da Adresse, Adresstyp und Port möglicherweise als FWP_EMPTY zurückkommen.

Die FWPM_FILTER0-Struktur kann einen Filter als Startzeit- oder persistenten Filter bezeichnen. Startzeitfilter werden der Basisfilter-Engine (BFE) hinzugefügt, wenn der TCP/IP-Treiber gestartet wird, und sie werden entfernt, sobald die BFE-Initialisierung abgeschlossen ist. Persistente Objekte werden hinzugefügt, wenn die BFE gestartet wird.

Diese Funktion kann nicht innerhalb einer schreibgeschützten Transaktion aufgerufen werden. Bei FWP_E_INCOMPATIBLE_TXN tritt ein Fehler auf. Weitere Informationen zu Transaktionen finden Sie unter Objektverwaltung .

Der Aufrufer benötigt die folgenden Zugriffsrechte:

Weitere Informationen finden Sie unter Access Control.

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 bei der Filter-Engine zu registrieren.
  • Rufen Sie FwpmCalloutAdd0 auf, um die Legende dem System hinzuzufügen.
  • Rufen Sie FwpmFilterAdd0 auf, um den Filter hinzuzufügen, der auf die Legende an das System verweist.

Standardmäßig werden Filter, die auf Legenden verweisen, die hinzugefügt, aber noch nicht bei der Filter-Engine registriert wurden, als Blockfilter behandelt.

FwpmFilterAdd0 ist eine spezifische Implementierung von FwpmFilterAdd. Weitere Informationen finden Sie unter WFP-Version-Independent Namen und Spezifische Windows-Versionen .

Beispiele

Das folgende C++-Beispiel zeigt, wie Sie mithilfe von FwpmFilterAdd0 einen Filter initialisieren und hinzufügen, der
blockiert insbesondere Datenverkehr auf IP V4 für alle Anwendungen.


// 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
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile fwpmu.h
Bibliothek Fwpuclnt.lib
DLL Fwpuclnt.dll

Weitere Informationen

FWPM_FILTER0

Verwaltungsfunktionen

WFP-Funktionen