Função FwpsPendOperation0 (fwpsk.h)
A função FwpsPendOperation0 é chamada por um texto explicativo para suspender o processamento de pacotes até a conclusão de outra operação.
Sintaxe
NTSTATUS FwpsPendOperation0(
[in] HANDLE completionHandle,
[out] HANDLE *completionContext
);
Parâmetros
[in] completionHandle
Um identificador de conclusão necessário para aguardar a operação de filtragem atual. Esse parâmetro é obtido do membro completionHandle da estrutura FWPS_INCOMING_METADATA_VALUES0 passada para a função classifyFn do driver de texto explicativo.
[out] completionContext
O identificador para o contexto de conclusão desta operação pendente. Quando o texto explicativo estiver pronto para retomar o processamento de pacotes, ele chamará a função FwpsCompleteOperation0 com o valor desse parâmetro como o parâmetro completionContext de entrada.
Retornar valor
A função FwpsPendOperation0 retorna um dos seguintes códigos NTSTATUS.
Código de retorno | Descrição |
---|---|
|
O processamento de pacotes foi pendente com êxito. |
|
Uma chamada foi feita para FwpsPendOperation0 em uma operação de classificação de reautorização. Para obter mais informações, consulte Comentários. |
|
Um ou mais dos parâmetros são inválidos. |
|
A pilha de rede TCP/IP não está pronta para permitir essa operação. |
|
Ocorreu um erro. |
Comentários
O texto explicativo deve manter o valor do parâmetro completionContext até que ele retome o processamento de pacotes. Quando a operação que motivou a chamada para essa função for concluída, o texto explicativo deverá chamar a função FwpsCompleteOperation0 , passando-lhe o valor do parâmetro completionContext .
Um texto explicativo pode chamar essa função apenas para aguardar um pacote que se origina do FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_ Xxx, FWPM_LAYER_ALE_AUTH_LISTEN_ Xxx ou FWPM_LAYER_ALE_AUTH_CONNECT_ camadas de filtragemXxx. Um texto explicativo pode aguardar a operação de processamento atual em um pacote quando o texto explicativo deve executar o processamento em uma dessas camadas que pode levar um longo intervalo para ser concluído ou que deve ocorrer em IRQL = PASSIVE_LEVEL se o IRQL > atual PASSIVE_LEVEL.
Para concluir uma conexão que estava anteriormente pendente na camada xxx FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_, o driver de texto explicativo deve reinjetar o pacote clonado nessa camada, bem como chamar a função FwpsCompleteOperation0 .
Para poder aguardar o processamento de pacotes, a função classifyFn do driver de texto explicativo deve definir o membro actionType da estrutura FWPS_CLASSIFY_OUT0 como FWP_ACTION_BLOCK e o membro Flags como FWPS_CLASSIFY_OUT_FLAG_ABSORB.
As conexões pendentes são autenticadas novamente após a execução da função FwpsCompleteOperation0 . As conexões TCP, se permitidas, são criadas concluindo a operação de handshake, mas as conexões não TCP criam apenas entradas de estado. Todos os dados de pacote pendentes são liberados da memória quando a função FwpsPendOperation0 é concluída, portanto, os aplicativos devem retransmitir esses pacotes após a execução de FwpsCompleteOperation0 . Os textos explicativos podem armazenar esses dados em buffer e reinjetar os dados em seu nome.
Somente uma autorização inicial de fluxo ALE (Application Layer Enforcement) pode ser adiada chamando FwpsPendOperation0 e FwpsCompleteOperation0. Se um fluxo ALE for reautorizado, o sinalizador FWP_CONDITION_FLAG_IS_REAUTHORIZE será definido. Uma chamada para FwpsPendOperation0 das camadas de filtragemFWPM_LAYER_ALE_AUTH_CONNECT_ Xxx ou FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx falhará se o sinalizador de FWP_CONDITION_FLAG_IS_REAUTHORIZE estiver definido e o código STATUS_FWP_CANNOT_PEND status for retornado. Para obter mais informações, consulte Reautorização do ALE no SDK do Windows.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows Vista. |
Plataforma de Destino | Universal |
Cabeçalho | fwpsk.h (inclua Fwpsk.h) |
Biblioteca | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |