Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Depois que um driver de callout tiver criado um objeto de dispositivo, ele poderá registrar as suas chamadas com o mecanismo de filtro. Um driver de callout pode registar os seus callouts com o mecanismo de filtro a qualquer momento, mesmo que o mecanismo de filtro não esteja atualmente em execução. Para registar uma chamada de atenção com o mecanismo de filtro, um driver de chamada de atenção chama a função FwpsCalloutRegister0. Por exemplo:
// 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;
}
Se a chamada para a função FwpsCalloutRegister0 for bem-sucedida, a variável apontada pelo último parâmetro conterá o identificador de tempo de execução para a chamada. Este identificador em tempo de execução corresponde ao GUID especificado para a chave de chamada.
Um único driver de callout pode implementar mais de um callout. Se um driver de callout implementar mais de um callout, ele chama a função FwpsCalloutRegister0 uma vez para cada callout que suporta, para registrar cada callout no mecanismo de filtro.