Condividi tramite


Funzione FwpmFilterAdd0 (fwpmu.h)

La funzione FwpmFilterAdd0 aggiunge un nuovo oggetto filtro al sistema.

Sintassi

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

Parametri

[in] engineHandle

Tipo: HANDLE

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

[in] filter

Tipo: FWPM_FILTER0*

Oggetto filtro da aggiungere.

[in, optional] sd

Tipo: SECURITY_DESCRIPTOR

Informazioni di sicurezza sull'oggetto filtro.

[out, optional] id

Tipo: UINT64*

Identificatore di runtime per questo filtro.

Valore restituito

Tipo: DWORD

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 del WFP .
RPC_* codice di errore
0x80010001: 0x80010122
Errore di comunicazione con il motore firewall remoto o locale.

Commenti

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 , 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 al livello FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*.

Nota

Se viene specificato un indirizzo locale al livello di assegnazione delle risorse, un binding implicito avrà esito positivo perché indirizzo, tipo di indirizzo e porta potrebbe 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 del BFE.

Questa funzione non può essere chiamata dall'interno di una transazione di sola lettura. L'errore avrà 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 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 filtri di blocco.

FwpmFilterAdd0 è un'implementazione specifica di FwpmFilterAdd. Per altre informazioni, vedere Wfp Version-Independent Names and Targeting Specific Versions of Windows .See WFP Version-Independent Names and Targeting Specific Versions of Windows.See WFP Version-Independent Names and Targeting Specific Versions of Windows for more information.

Esempio

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

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione fwpmu.h
Libreria Fwpuclnt.lib
DLL Fwpuclnt.dll

Vedi anche

FWPM_FILTER0

Funzioni di gestione

Funzioni WFP