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
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:
- FWPM_ACTRL_ADD l'accesso al contenitore del filtro
- FWPM_ACTRL_ADD_LINK l'accesso al provider (se presente)
- FWPM_ACTRL_ADD_LINK l'accesso al livello applicabile
- FWPM_ACTRL_ADD_LINK l'accesso al livello secondario applicabile
- FWPM_ACTRL_ADD_LINK l'accesso al callout (se presente)
- FWPM_ACTRL_ADD_LINK l'accesso al contesto del provider (se presente).
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 |