Compartir a través de


Función FwpsAllocateDeepCloneNetBufferList0 (fwpsk.h)

La función FwpsAllocateDeepCloneNetBufferList0 asigna una estructura NET_BUFFER_LIST que es un clon profundo de una estructura de NET_BUFFER_LIST existente.

Sintaxis

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

Puntero a la estructura de NET_BUFFER_LIST original que se va a clonar.

[in, optional] netBufferListPoolHandle

Identificador de grupo de NET_BUFFER_LIST que se obtuvo de una llamada anterior a la función NdisAllocateNetBufferListPool . Este parámetro es opcional y puede ser NULL.

[in, optional] netBufferPoolHandle

Identificador de grupo de NET_BUFFER_LIST que se obtuvo de una llamada anterior a la función NdisAllocateNetBufferPool . Este parámetro es opcional y puede ser NULL.

[out] netBufferList

Puntero a una variable que recibe un puntero a la estructura del clon profundo NET_BUFFER_LIST .

Valor devuelto

La función FwpsAllocateDeepCloneNetBufferList0 devuelve uno de los siguientes códigos NTSTATUS.

Código devuelto Descripción
STATUS_SUCCESS El clon profundo NET_BUFFER_LIST estructura se asignó correctamente.
Otros códigos de estado Se produjo un error.

Comentarios

Un controlador de llamada llama a la función FwpsAllocateDeepCloneNetBufferList0 para asignar una estructura de clonación profunda NET_BUFFER_LIST de una estructura de NET_BUFFER_LIST existente.

Esta función es un contenedor alrededor de la función NdisAllocateCloneNetBufferList , pero está especializada para su uso por las funciones de inyección de paquetes DE PMA.

Si el clon profundo NET_BUFFER_LIST estructura debe tener atributos asociados a un grupo específico, el controlador de llamada debe especificar el identificador de grupo en el parámetro NetBufferListPoolHandle o NetBufferPoolHandle . Si estos parámetros son NULL, se usa el grupo predeterminado asignado previamente por NDIS.

La estructura del clon profundo NET_BUFFER_LIST describe los mismos datos descritos por la estructura de NET_BUFFER_LIST original. La función FwpsAllocateDeepCloneNetBufferList0 copia los datos descritos por los MDL originales en nuevos búferes de datos. La estructura de NET_BUFFER_LIST clonada incluye una estructura de NET_BUFFER_LIST_CONTEXT inicial.

Esta función establece el miembro ParentNetBufferList de la estructura de NET_BUFFER_LIST clonada recién creada para que apunte a la estructura de NET_BUFFER_LIST primaria. El miembro ChildRefCount de la estructura primaria se incrementa en 1.

Un controlador de llamada puede modificar el clon NET_BUFFER_LIST estructura e insertarlo en la pila de red en lugar de la estructura de NET_BUFFER_LIST original llamando a las funciones de inserción de paquetes. Una vez que los datos descritos por la estructura de NET_BUFFER_LIST clonado se han insertado correctamente en la pila de red, el controlador de llamada libera la estructura de NET_BUFFER_LIST clonada mediante una llamada a la función FwpsFreeCloneNetBufferList0 .

Un controlador de llamada puede insertar o reemplazar búferes netos individuales (NET_BUFFER) o MDL dentro del NET_BUFFER_LIST de clonación profunda. El controlador debe deshacer estas modificaciones antes de llamar a la función FwpsFreeCloneNetBufferList0 .

Directrices para administrar paquetes clonados

Un controlador de llamada no debe contener paquetes clonados indefinidamente. Un paquete clonado puede interferir con las operaciones de administración de energía en un equipo inactivo.

El uso previsto para paquetes clonados profundos en EL PMA es obtener aclaraciones de una aplicación en modo de usuario u otra operación relativamente rápida que necesita un paquete independiente del original. El controlador de llamada no debe contener paquetes clonados mientras espera la entrada del usuario, la autorización del servicio web o cualquier otra operación que pueda tardar un tiempo arbitrario.

Los controladores de llamada siempre deben devolver los paquetes retenidos lo antes posible.

Requisitos

Requisito Value
Cliente mínimo compatible Compilación 25324 de WIP
Plataforma de destino Universal
Encabezado fwpsk.h (incluya Fwpsk.h)
Library Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Consulte también

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Funciones de inyección de paquetes