Condividi tramite


Funzione FwpmFilterAdd0 (fwpmk.h)

La funzione FwpmFilterAdd0 aggiunge un nuovo oggetto filtro al sistema.

Sintassi

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

Parametri

[in] engineHandle

Handle per una sessione aperta al motore di filtro. Chiamare FwpmEngineOpen0 per aprire una sessione al motore di filtro.

[in] filter

Oggetto filtro da aggiungere.

[in, optional] sd

Informazioni di sicurezza sull'oggetto filtro.

[out, optional] id

Identificatore di runtime per questo filtro.

Valore restituito

Codice/valore restituito Descrizione
ERROR_SUCCESS
0
Il filtro è stato aggiunto correttamente.
ERROR_INVALID_SECURITY_DESCR
0x8007053A
La struttura del descrittore di sicurezza non è valida. In alternativa, una condizione di filtro contiene un descrittore di sicurezza in formato assoluto.
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
Il chiamante ha aggiunto un filtro callout e il callout ha restituito un errore dalla routine di notifica.
FWP_E_* codice di errore
0x80320001: 0x80320039
Errore specifico di Windows Filtering Platform (WFP). Per informazioni dettagliate, vedere codici di errore WFP.
RPC_* codice di errore
0x80010001: 0x80010122
Errore di comunicazione con il motore firewall remoto o locale.
Altri codici NTSTATUS Si è verificato un errore.

Osservazioni

FwpmFilterAdd0 aggiunge il filtro al livello secondario specificato a ogni livello di filtro nel sistema.

Alcuni campi nella struttura FWPM_FILTER0 vengono assegnati dal sistema, non dal chiamante e vengono ignorati nella chiamata a FwpmFilterAdd0.

Se il chiamante fornisce un descrittore di sicurezza null NULL, il sistema assegnerà un descrittore di sicurezza predefinito.

Per bloccare le connessioni a posizioni specifiche, aggiungere un filtro FWP_ACTION_BLOCK che specifica l'indirizzo locale al livello FWPM_LAYER_ALE_AUTH_CONNECT_V* oppure aggiungere un filtro FWP_ACTION_BLOCK senza specificare l'indirizzo locale nel livello FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*.

Se a livello di assegnazione di risorse viene specificato un indirizzo locale, un'associazione implicita avrà esito positivo perché l'indirizzo, il tipo di indirizzo e la porta potrebbero tornare come FWP_EMPTY.

La struttura FWPM_FILTER0 può etichettare un filtro come filtro di avvio o persistente. I filtri di avvio vengono aggiunti al motore di filtro di base (BFE) all'avvio del driver TCP/IP e vengono rimossi al termine dell'inizializzazione BFE. Gli oggetti persistenti vengono aggiunti all'avvio della BFE.

Questa funzione non può essere chiamata dall'interno di una transazione di sola lettura, ma ha esito negativo con FWP_E_INCOMPATIBLE_TXN. Per altre informazioni sulle transazioni, vedere Gestione oggetti .

Il chiamante deve disporre dei diritti di accesso seguenti:

Per altre informazioni, vedere di controllo di accesso.

Per aggiungere un filtro che fa riferimento a un callout, richiamare le funzioni nell'ordine seguente.

  • Chiamare FwpsCalloutRegister0 (documentato in Windows Driver Kit (WDK) per registrare il callout con il motore di filtro.
  • Chiamare FwpmCalloutAdd0 per aggiungere il callout al sistema.
  • Chiamare FwpmFilterAdd0 per aggiungere il filtro che fa riferimento al callout al sistema.

Per impostazione predefinita, i filtri che fanno riferimento ai callout aggiunti ma che non sono ancora stati registrati con il motore di filtro vengono considerati come filtri di blocco.

FwpmFilterAdd0 è un'implementazione specifica di FwpmFilterAdd. Per altre informazioni, vedere nomi Version-Independent WFP e selezione di versioni specifiche di Windows.

Esempi

L'esempio C++ seguente illustra come inizializzare e aggiungere un filtro usando FwpmFilterAdd0 che blocca in modo specifico il traffico su IP V4 per tutte le applicazioni.

// 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");

Fabbisogno

Requisito Valore
client minimo supportato Disponibile a partire da Windows Vista.
piattaforma di destinazione Universale
intestazione fwpmk.h
libreria fwpkclnt.lib
IRQL <= PASSIVE_LEVEL

Vedere anche