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çãoNdisAllocateNetBufferListPool. Esse parâmetro é opcional e pode ser NULL.
[in, optional] netBufferPoolHandle
Um identificador de pool NET_BUFFER_LIST obtido de uma chamada anterior para a função deNdisAllocateNetBufferPool. 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.
Valor de retorno
A função FwpsAllocateDeepCloneNetBufferList0 retorna um dos seguintes códigos NTSTATUS.
Código de retorno | Descrição |
---|---|
STATUS_SUCCESS | O clone profundo NET_BUFFER_LIST estrutura foi alocado com êxito. |
Outros códigos de status | Ocorreu um erro. |
Observações
Um driver 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 deNdisAllocateCloneNetBufferList, mas é especializada para uso por funções de injeção de pacote de WFP.
Se o clone profundo NET_BUFFER_LIST estrutura deve ter atributos associados a um pool específico, o driver de texto explicativo deverá 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.
O clone profundo NET_BUFFER_LIST estrutura 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 do clone inclui uma estrutura de NET_BUFFER_LIST_CONTEXT inicial.
Essa função define o membro ParentNetBufferList da estrutura de NET_BUFFER_LIST clone recém-criada para apontar para a estrutura de NET_BUFFER_LIST pai. O membro ChildRefCount da estrutura pai é incrementado por 1.
Um driver 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 pela estrutura de NET_BUFFER_LIST clone tiverem sido injetados com êxito na pilha de rede, o driver de texto explicativo libera o clone NET_BUFFER_LIST estrutura chamando a função FwpsFreeCloneNetBufferList0.
Um driver de texto explicativo pode inserir ou substituir buffers de rede individuais (NET_BUFFER) ou MDLs dentro do clone profundo NET_BUFFER_LIST. O driver deve desfazer essas modificações antes de chamar a função deFwpsFreeCloneNetBufferList0.
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 |
---|---|
de cliente com suporte mínimo | Build wip 25324 |
da Plataforma de Destino | Universal |
cabeçalho | fwpsk.h (inclua Fwpsk.h) |
biblioteca | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |