Partager via


FwpmFilterAdd0, fonction (fwpmk.h)

La fonction FwpmFilterAdd0 ajoute un nouvel objet de filtre au système.

Syntaxe

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

Paramètres

[in] engineHandle

Gérer une session ouverte sur le moteur de filtre. Appelez FwpmEngineOpen0 pour ouvrir une session au moteur de filtre.

[in] filter

Objet de filtre à ajouter.

[in, optional] sd

Informations de sécurité sur l’objet de filtre.

[out, optional] id

Identificateur d’exécution de ce filtre.

Valeur de retour

Retourner le code/la valeur Description
ERROR_SUCCESS
0
Le filtre a été ajouté avec succès.
ERROR_INVALID_SECURITY_DESCR
0x8007053A
La structure du descripteur de sécurité n’est pas valide. Ou, une condition de filtre contient un descripteur de sécurité au format absolu.
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
L’appelant a ajouté un filtre de légende et la légende a renvoyé une erreur de sa routine de notification.
code d’erreur FWP_E_*
0x80320001 — 0x80320039
Erreur spécifique à la plateforme de filtrage Windows (PAM). Consultez codes d’erreur PAM pour plus d’informations.
code d’erreur RPC_*
0x80010001 — 0x80010122
Échec de la communication avec le moteur de pare-feu distant ou local.
autres codes NTSTATUS Une erreur s’est produite.

Remarques

FwpmFilterAdd0 ajoute le filtre à la sous-couche spécifiée à chaque couche de filtrage du système.

Certains champs de la structure FWPM_FILTER0 sont attribués par le système, et non par l’appelant, et sont ignorés dans l’appel à FwpmFilterAdd0.

Si l’appelant fournit un descripteur de sécurité NULL, le système affecte un descripteur de sécurité par défaut.

Pour bloquer les connexions à des emplacements particuliers, ajoutez un filtre FWP_ACTION_BLOCK spécifiant l’adresse locale au niveau de la couche FWPM_LAYER_ALE_AUTH_CONNECT_V*, ou ajoutez un filtre FWP_ACTION_BLOCK sans spécifier l’adresse locale au niveau de la couche FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*.

Si une adresse locale est spécifiée au niveau de la couche d’affectation de ressources, une liaison implicite réussit, car l’adresse, le type d’adresse et le port peuvent revenir en tant que FWP_EMPTY.

La structure FWPM_FILTER0 peut étiqueter un filtre comme filtre de démarrage ou persistant. Les filtres au moment du démarrage sont ajoutés au moteur de filtrage de base (BFE) au démarrage du pilote TCP/IP et sont supprimés une fois l’initialisation terminée par le BFE. Les objets persistants sont ajoutés au démarrage du BFE.

Cette fonction ne peut pas être appelée à partir d’une transaction en lecture seule, elle échoue avec FWP_E_INCOMPATIBLE_TXN. Pour plus d’informations sur les transactions, consultez gestion des objets.

L’appelant a besoin des droits d’accès suivants :

Pour plus d’informations, consultez contrôle d’accès.

Pour ajouter un filtre qui fait référence à une légende, appelez les fonctions dans l’ordre suivant.

  • Appelez FwpsCalloutRegister0 (documenté dans le Kit de pilotes Windows (WDK)) pour inscrire la légende auprès du moteur de filtre.
  • Appelez FwpmCalloutAdd0 pour ajouter la légende au système.
  • Appelez FwpmFilterAdd0 pour ajouter le filtre qui fait référence à la légende au système.

Par défaut, les filtres qui référencent les légendes qui ont été ajoutées mais qui n’ont pas encore été inscrits auprès du moteur de filtre sont traités comme des filtres de bloc.

FwpmFilterAdd0 est une implémentation spécifique de FwpmFilterAdd. Pour plus d’informations, consultez PAM Version-Independent noms et ciblage de versions spécifiques de Windows.

Exemples

L’exemple C++ suivant montre comment initialiser et ajouter un filtre à l’aide de FwpmFilterAdd0 qui bloque spécifiquement le trafic sur IP V4 pour toutes les applications.

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

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows Vista.
plateforme cible Universel
d’en-tête fwpmk.h
bibliothèque fwpkclnt.lib
IRQL <= PASSIVE_LEVEL

Voir aussi