FwpmFilterAdd0 function (fwpmu.h)
A função FwpmFilterAdd0 adiciona um novo objeto de filtro ao sistema.
Sintaxe
DWORD FwpmFilterAdd0(
[in] HANDLE engineHandle,
[in] const FWPM_FILTER0 *filter,
[in, optional] PSECURITY_DESCRIPTOR sd,
[out, optional] UINT64 *id
);
Parâmetros
[in] engineHandle
Tipo: HANDLE
Manipule para uma sessão aberta para o mecanismo de filtro. Chame FwpmEngineOpen0 para abrir uma sessão para o mecanismo de filtro.
[in] filter
Tipo: FWPM_FILTER0*
O objeto de filtro a ser adicionado.
[in, optional] sd
Tipo: SECURITY_DESCRIPTOR
Informações de segurança sobre o objeto de filtro.
[out, optional] id
Tipo: UINT64*
O identificador de runtime para esse filtro.
Retornar valor
Tipo: DWORD
Valor/código retornado | 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 Códigos de erro WFP para obter detalhes. |
código de erro RPC_* 0x80010001 — 0x80010122 |
Falha ao se comunicar com o mecanismo de firewall remoto ou local. |
Comentários
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 com locais específicos, adicione um filtro FWP_ACTION_BLOCK especificando o endereço local na camada FWPM_LAYER_ALE_AUTH_CONNECT_V* ou adicione um filtro FWP_ACTION_BLOCK sem especificar o endereço local na camada FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*.
Observação
Se um endereço local for especificado na camada de atribuição de recursos, 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 persistente ou de tempo de inicialização. Os filtros de tempo de inicialização são adicionados ao BFE (Mecanismo de Filtragem Base) quando o driver TCP/IP é iniciado e removidos depois que 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. Ele falhará com FWP_E_INCOMPATIBLE_TXN. Consulte Gerenciamento de Objetos para obter mais informações sobre transações.
O chamador precisa dos seguintes direitos de acesso:
- FWPM_ACTRL_ADD acesso ao contêiner do filtro
- FWPM_ACTRL_ADD_LINK acesso ao provedor (se houver)
- FWPM_ACTRL_ADD_LINK acesso à camada aplicável
- FWPM_ACTRL_ADD_LINK acesso à subcaminho aplicável
- FWPM_ACTRL_ADD_LINK acesso ao texto explicativo (se houver)
- FWPM_ACTRL_ADD_LINK acesso ao contexto do provedor (se houver).
Consulte 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 (Kit de Driver do Windows) 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 Direcionamento de versões específicas 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 |
---|---|
Cliente mínimo com suporte | Windows Vista [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | fwpmu.h |
Biblioteca | Fwpuclnt.lib |
DLL | Fwpuclnt.dll |