Inscription de légendes auprès du moteur de filtre

Une fois qu’un pilote de légende a créé un objet d’appareil, il peut inscrire ses légendes auprès du moteur de filtre. Un pilote de légende peut inscrire ses légendes auprès du moteur de filtre à tout moment, même si le moteur de filtre n’est pas en cours d’exécution. Pour inscrire une légende auprès du moteur de filtre, un pilote de légende appelle la fonction FwpsCalloutRegister0 . Par exemple :

// Prototypes for the callout's callout functions
VOID NTAPI
 ClassifyFn(
    IN const FWPS_INCOMING_VALUES0  *inFixedValues,
    IN const FWPS_INCOMING_METADATA_VALUES0  *inMetaValues,
    IN OUT VOID  *layerData,
    IN const FWPS_FILTER0  *filter,
    IN UINT64  flowContext,
    IN OUT FWPS_CLASSIFY_OUT0  *classifyOut
    );

NTSTATUS NTAPI
 NotifyFn(
 IN FWPS_CALLOUT_NOTIFY_TYPE notifyType,
    IN const GUID  *filterKey,
    IN const FWPS_FILTER0  *filter
    );

VOID NTAPI
 FlowDeleteFn(
    IN UINT16  layerId,
    IN UINT32  calloutId,
    IN UINT64  flowContext
    );

// Callout registration structure
const FWPS_CALLOUT0 Callout =
{
 { ... }, // GUID key identifying the callout
  0,       // Callout-specific flags (none set here)
 ClassifyFn,
 NotifyFn,
 FlowDeleteFn
};

// Variable for the run-time callout identifier
UINT32 CalloutId;

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  PDEVICE_OBJECT deviceObject;
  NTSTATUS status;

  ...

 status =
 FwpsCalloutRegister0(
 deviceObject,
      &Callout,
      &CalloutId
      );

  ...

 return status;
}

Si l’appel à la fonction FwpsCalloutRegister0 réussit, la variable pointée par le dernier paramètre contient l’identificateur d’exécution de la légende. Cet identificateur d’exécution correspond au GUID qui a été spécifié pour la clé de légende.

Un pilote de légende unique peut implémenter plusieurs légendes. Si un pilote de légende implémente plusieurs légendes, il appelle la fonction FwpsCalloutRegister0 une fois pour chaque légende prise en charge pour inscrire chaque légende auprès du moteur de filtre.

classifyFn