Compartilhar via


Função FwpmFilterAdd0 (fwpmk.h)

A função FwpmFilterAdd0 adiciona um novo objeto de filtro ao sistema.

Sintaxe

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

Parâmetros

[in] engineHandle

Manipule uma sessão aberta para o mecanismo de filtro. Chame FwpmEngineOpen0 para abrir uma sessão no mecanismo de filtro.

[in] filter

O objeto de filtro a ser adicionado.

[in, optional] sd

Informações de segurança sobre o objeto de filtro.

[out, optional] id

O identificador de runtime para esse filtro.

Valor de retorno

Código/valor de retorno Descrição
ERROR_SUCCESS
0
O filtro foi adicionado com êxito.
ERROR_INVALID_SECURITY_DESCR
0x8007053A
A estrutura do descritor de segurança é inválida. Ou uma condição de filtro contém um descritor de segurança em formato absoluto.
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
O chamador adicionou um filtro de texto explicativo e o texto explicativo retornou um erro de sua rotina de notificação.
código de erro FWP_E_*
0x80320001 — 0x80320039
Um erro específico da Plataforma de Filtragem do Windows (WFP). Consulte de códigos de erro do WFP para obter detalhes.
código de erro RPC_*
0x80010001 — 0x80010122
Falha ao se comunicar com o mecanismo de firewall local ou remoto.
outros códigos NTSTATUS Ocorreu um erro.

Observações

FwpmFilterAdd0 adiciona o filtro à subcamada especificada em cada camada de filtragem no sistema.

Alguns campos na estrutura FWPM_FILTER0 são atribuídos pelo sistema, não pelo chamador e são ignorados na chamada para FwpmFilterAdd0.

Se o chamador fornecer um descritor de segurança NULL, o sistema atribuirá um descritor de segurança padrão.

Para bloquear conexões a locais específicos, adicione um filtro FWP_ACTION_BLOCK especificando o endereço local na camada de FWPM_LAYER_ALE_AUTH_CONNECT_V* ou adicione um filtro FWP_ACTION_BLOCK sem especificar o endereço local na camada de FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V* .

Se um endereço local for especificado na camada de atribuição de recurso, uma associação implícita terá êxito porque o endereço, o tipo de endereço e a porta podem voltar como FWP_EMPTY.

A estrutura FWPM_FILTER0 pode rotular um filtro como um filtro de tempo de inicialização ou persistente. Os filtros de tempo de inicialização são adicionados ao BFE (Mecanismo de Filtragem Base) quando o driver TCP/IP é iniciado e removidos quando o BFE conclui a inicialização. Objetos persistentes são adicionados quando o BFE é iniciado.

Essa função não pode ser chamada de dentro de uma transação somente leitura, ela falha com FWP_E_INCOMPATIBLE_TXN. Consulte de Gerenciamento de Objetos para obter mais informações sobre transações.

O chamador precisa dos seguintes direitos de acesso:

Consulte de Controle de Acesso para obter mais informações.

Para adicionar um filtro que faça referência a um texto explicativo, invoque as funções na ordem a seguir.

  • Chame FwpsCalloutRegister0 (documentado no WDK (Windows Driver Kit)) para registrar o texto explicativo com o mecanismo de filtro.
  • Chame FwpmCalloutAdd0 para adicionar o texto explicativo ao sistema.
  • Chame FwpmFilterAdd0 para adicionar o filtro que faz referência ao texto explicativo ao sistema.

Por padrão, os filtros que fazem referência a textos explicativos que foram adicionados, mas que ainda não foram registrados com o mecanismo de filtro, são tratados como filtros de bloco.

FwpmFilterAdd0 é uma implementação específica do FwpmFilterAdd. Consulte nomes de Version-Independent WFP e versões específicas de destino do Windows para obter mais informações.

Exemplos

O exemplo C++ a seguir mostra como inicializar e adicionar um filtro usando FwpmFilterAdd0 que bloqueia especificamente o tráfego no IP V4 para todos os aplicativos.

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows Vista.
da Plataforma de Destino Universal
cabeçalho fwpmk.h
biblioteca fwpkclnt.lib
IRQL <= PASSIVE_LEVEL

Consulte também