Función FwpsAllocateCloneNetBufferList0 (fwpsk.h)
La función FwpsAllocateCloneNetBufferList0 asigna una estructura NET_BUFFER_LIST que es un clon de una estructura de NET_BUFFER_LIST existente.
Sintaxis
NTSTATUS FwpsAllocateCloneNetBufferList0(
[in, out] NET_BUFFER_LIST *originalNetBufferList,
[in, optional] NDIS_HANDLE netBufferListPoolHandle,
[in, optional] NDIS_HANDLE netBufferPoolHandle,
[in] ULONG allocateCloneFlags,
[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 . Función NdisAllocateNetBufferListPool . Este parámetro es opcional y puede ser NULL.
[in, optional] netBufferPoolHandle
Identificador de grupo de NET_BUFFER que se obtuvo de una llamada anterior a la función NdisAllocateNetBufferPool . Este parámetro es opcional y puede ser NULL.
[in] allocateCloneFlags
Actualmente no hay marcas definidas para esta función. Los controladores de llamada deben establecer este parámetro en cero.
[out] netBufferList
Puntero a una variable que recibe un puntero a la estructura de NET_BUFFER_LIST clonada.
Valor devuelto
La función FwpsAllocateCloneNetBufferList0 devuelve uno de los siguientes códigos NTSTATUS.
Código devuelto | Descripción |
---|---|
|
La estructura del clon NET_BUFFER_LIST se asignó correctamente. |
|
Se produjo un error. |
Comentarios
Un controlador de llamada llama a la función FwpsAllocateCloneNetBufferList0 para asignar una estructura de NET_BUFFER_LIST clonada de una estructura de NET_BUFFER_LIST existente.
Esta función es un contenedor alrededor de Función NdisAllocateCloneNetBufferList , pero está especializada para su uso por las funciones de inyección de paquetes DE PMA.
Si el clon 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 de NET_BUFFER_LIST clonada describe los mismos datos descritos por la estructura de NET_BUFFER_LIST original. La función FwpsAllocateCloneNetBufferList0 no copia los datos descritos por los MDL originales en nuevos búferes de datos. En su lugar, el clon NET_BUFFER_LIST estructura hace referencia a los búferes de datos originales. La estructura del NET_BUFFER_LIST clonado no incluye una inicial NET_BUFFER_LIST_CONTEXT estructura.
Esta función establece el miembro ParentNetBufferList del clon recién creado NET_BUFFER_LIST estructura 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 del clon NET_BUFFER_LIST se han insertado correctamente en la pila de red, el controlador de llamada libera el clon NET_BUFFER_LIST estructura 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 de la lista de búferes de red clonados. Este controlador también debe deshacer las modificaciones antes de llamar a . 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 en EL PMA es obtener aclaraciones de una aplicación en modo de usuario u otra operación relativamente rápida. El controlador de llamada no debe contener paquetes clonados mientras, por ejemplo, esperando la entrada del usuario o esperando la autorización del servicio web, o esperando cualquier otra operación que pueda tardar un tiempo arbitrario.
Si el controlador de llamada necesita esperar una operación potencialmente larga, realiza una copia profunda del paquete mediante FwpsAllocateNetBufferAndNetBufferList0, y bloquea y absorbe el paquete original.
Los controladores de llamada siempre deben devolver los paquetes retenidos lo antes posible.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows Vista. |
Plataforma de destino | Universal |
Encabezado | fwpsk.h (incluya Fwpsk.h) |
Library | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |