Compartir a través de


Registro de llamadas con el motor de filtro

Una vez que un controlador de llamada ha creado un objeto de dispositivo, puede registrar sus llamadas con el motor de filtro. Un controlador de llamada puede registrar sus llamadas con el motor de filtro en cualquier momento, incluso si el motor de filtro no se está ejecutando actualmente. Para registrar una llamada con el motor de filtro, un controlador de llamada llama a la función FwpsCalloutRegister0 . Por ejemplo:

// 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 la llamada a la función FwpsCalloutRegister0 se realiza correctamente, la variable a la que apunta el último parámetro contiene el identificador en tiempo de ejecución de la llamada. Este identificador en tiempo de ejecución corresponde al GUID especificado para la clave de llamada.

Un único controlador de llamada puede implementar más de una llamada. Si un controlador de llamada implementa más de una llamada, llama a la función FwpsCalloutRegister0 una vez por cada llamada que admite para registrar cada llamada con el motor de filtro.

classifyFn