Compartilhar via


Função FwpsAllocateDeepCloneNetBufferList0 (fwpsk.h)

A função FwpsAllocateDeepCloneNetBufferList0 aloca uma estrutura NET_BUFFER_LIST que é um clone profundo de uma estrutura de NET_BUFFER_LIST existente.

Sintaxe

NTSTATUS FwpsAllocateDeepCloneNetBufferList0(
  [in, out]      NET_BUFFER_LIST *originalNetBufferList,
  [in, optional] NDIS_HANDLE     netBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     netBufferPoolHandle,
  [out]          NET_BUFFER_LIST **netBufferList
);

Parâmetros

[in, out] originalNetBufferList

Um ponteiro para a estrutura de NET_BUFFER_LIST original que está sendo clonada.

[in, optional] netBufferListPoolHandle

Um identificador de pool NET_BUFFER_LIST obtido de uma chamada anterior para a função NdisAllocateNetBufferListPool . Esse parâmetro é opcional e pode ser NULL.

[in, optional] netBufferPoolHandle

Um identificador de pool de NET_BUFFER_LIST obtido de uma chamada anterior para a função NdisAllocateNetBufferPool . Esse parâmetro é opcional e pode ser NULL.

[out] netBufferList

Um ponteiro para uma variável que recebe um ponteiro para o clone profundo NET_BUFFER_LIST estrutura.

Retornar valor

A função FwpsAllocateDeepCloneNetBufferList0 retorna um dos seguintes códigos NTSTATUS.

Código de retorno Descrição
STATUS_SUCCESS A estrutura de NET_BUFFER_LIST de clone profundo foi alocada com êxito.
Outros códigos de status Ocorreu um erro.

Comentários

Um driver de texto explicativo chama a função FwpsAllocateDeepCloneNetBufferList0 para alocar um clone profundo NET_BUFFER_LIST estrutura de uma estrutura de NET_BUFFER_LIST existente.

Essa função é um wrapper em torno da função NdisAllocateCloneNetBufferList , mas é especializada para uso por funções de injeção de pacote WFP.

Se o clone profundo NET_BUFFER_LIST estrutura deve ter atributos associados a um pool específico, o driver de texto explicativo deve especificar o identificador de pool no parâmetro NetBufferListPoolHandle ou NetBufferPoolHandle . Se esses parâmetros forem NULL, o pool padrão pré-alocado pelo NDIS será usado.

A estrutura de NET_BUFFER_LIST de clone profundo descreve os mesmos dados descritos pela estrutura de NET_BUFFER_LIST original. A função FwpsAllocateDeepCloneNetBufferList0 copia os dados descritos pelos MDLs originais para novos buffers de dados. A estrutura de NET_BUFFER_LIST de clone inclui uma estrutura de NET_BUFFER_LIST_CONTEXT inicial.

Essa função define o membro ParentNetBufferList da estrutura de NET_BUFFER_LIST de clone recém-criada para apontar para a estrutura de NET_BUFFER_LIST pai. O membro ChildRefCount da estrutura pai é incrementado em 1.

Um driver de texto explicativo pode modificar o clone NET_BUFFER_LIST estrutura e injetá-lo na pilha de rede no lugar da estrutura de NET_BUFFER_LIST original chamando as funções de injeção de pacote. Depois que os dados descritos pelo clone NET_BUFFER_LIST estrutura tiverem sido injetados com êxito na pilha de rede, o driver de texto explicativo libera a estrutura de NET_BUFFER_LIST clone chamando a função FwpsFreeCloneNetBufferList0 .

Um driver de texto explicativo pode inserir ou substituir buffers de rede individuais (NET_BUFFER) ou MDLs dentro do NET_BUFFER_LIST de clone profundo. O driver deve desfazer essas modificações antes de chamar a função FwpsFreeCloneNetBufferList0 .

Diretrizes para gerenciar pacotes clonados

Um driver de texto explicativo não deve conter pacotes clonados indefinidamente. Um pacote clonado pode interferir nas operações de gerenciamento de energia em um computador ocioso.

O uso pretendido para pacotes clonados profundos no WFP é obter esclarecimentos de um aplicativo no modo de usuário ou de outra operação relativamente rápida que precise de um pacote independente do original. O driver de texto explicativo não deve conter pacotes clonados enquanto aguarda a entrada do usuário, a liberação do serviço Web ou qualquer outra operação que possa levar um tempo arbitrário.

Os drivers de texto explicativo sempre devem retornar pacotes mantidos o mais rápido possível.

Requisitos

Requisito Valor
Cliente mínimo com suporte Build 25324 da WIP
Plataforma de Destino Universal
Cabeçalho fwpsk.h (inclua Fwpsk.h)
Biblioteca Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Confira também

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Funções de injeção de pacote