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 :
- FWPM_ACTRL_ADD l’accès au conteneur du filtre
- FWPM_ACTRL_ADD_LINK l’accès au fournisseur (le cas échéant)
- FWPM_ACTRL_ADD_LINK l’accès à la couche applicable
- FWPM_ACTRL_ADD_LINK l’accès à la sous-couche applicable
- FWPM_ACTRL_ADD_LINK l’accès à la légende (le cas échéant)
- FWPM_ACTRL_ADD_LINK l’accès au contexte du fournisseur (le cas échéant).
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 |