Uso del etiquetado de paquetes
Un controlador de llamada puede etiquetar paquetes de interés y recibir notificaciones de eventos que se producen en los paquetes etiquetados. El etiquetado de paquetes se admite en Windows 7 y versiones posteriores de Windows.
Para usar el etiquetado de paquetes, el controlador de llamada debe implementar el FWPS_NET_BUFFER_LIST_NOTIFY_FN0 o FWPS_NET_BUFFER_LIST_NOTIFY_FN1 función de devolución de llamada. Esta función recibirá todas las notificaciones de estado de los paquetes etiquetados. Para poder etiquetar paquetes individuales, el controlador de llamada debe obtener una etiqueta de contexto especial llamando a FwpsNetBufferListGetTagForContext0. El controlador de llamada puede usar la misma etiqueta de contexto para algunos o todos los paquetes etiquetados. Por ejemplo, un controlador de llamada podría diferenciar entre los tipos de paquetes etiquetados mediante etiquetas de contexto diferentes.
Para etiquetar paquetes, el controlador de llamada usa estructuras NET_BUFFER_LIST . El controlador de llamada realiza llamadas a FwpsNetBufferListAssociateContext0 para etiquetar estructuras NET_BUFFER_LIST individuales. El contexto que asocia el controlador de llamada al paquete es un valor arbitrario de 64 bits sin signo. Cuando se desencadena un evento, el FWPS_NET_BUFFER_LIST_NOTIFY_FN0 o FWPS_NET_BUFFER_LIST_NOTIFY_FN1 devolución de llamada pasa el contexto como parámetro de entrada para que el controlador de llamada pueda identificar paquetes etiquetados individuales. El motor de filtrado no usa ni evalúa el contexto. Solo se pasa a la devolución de llamada para que la use el controlador de llamada.
Los contextos se quitan de los paquetes etiquetados automáticamente cuando los paquetes dejan la pila. Sin embargo, si los paquetes nunca entran en la pila TCP/IP (por ejemplo, en el caso de un controlador de filtro NDIS), los contextos deberán quitarse manualmente llamando a FwpsNetBufferListRemoveContext0 con el parámetro netBufferList establecido en NULL.
Si una llamada necesita anular las operaciones de etiquetado temprano, los contextos se pueden quitar llamando a FwpsNetBufferListRemoveContext0. La eliminación de un contexto suele desencadenar un evento de FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED . Para obtener más información sobre los eventos que se pueden desencadenar, consulte la enumeración FWPS_NET_BUFFER_LIST_EVENT_TYPE0 . En algunos casos, no se desencadenará ningún evento, como cuando el paquete nunca entre en la pila TCP/IP para su procesamiento.
Cuando se clona un paquete etiquetado, el controlador de llamada puede mover o copiar el contexto en el paquete clonado. Para mover el contexto (en el caso de un clon), el controlador de llamada debe llamar a FwpsNetBufferListRetrieveContext0 con el parámetro removeContext establecido en TRUE. A continuación, el contexto se puede asociar al nuevo paquete. El proceso para copiar el contexto (en el caso de una duplicación) es el mismo, excepto que el parámetro removeContext de FwpsNetBufferListRetrieveContext0 debe establecerse en FALSE.
Los paquetes etiquetados desde capas TCP/IP se pueden recuperar de un controlador de filtro NDIS. Lo contrario también es cierto. El etiquetado de paquetes no está disponible en las capas de flujo en las que no se indica ningún paquete excepto los segmentos de datos.
Un controlador de llamada puede recuperar el contexto de un paquete fuera de la función FWPS_NET_BUFFER_LIST_NOTIFY_FN0 o FWPS_NET_BUFFER_LIST_NOTIFY_FN1 llamando a FwpsNetBufferListRetrieveContext0. Normalmente, un controlador de llamada recuperará el contexto en su devolución de llamada de classifyFn .
Temas relacionados
FWPS_NET_BUFFER_LIST_EVENT_TYPE0
FWPS_NET_BUFFER_LIST_NOTIFY_FN0
FWPS_NET_BUFFER_LIST_NOTIFY_FN1
FwpsNetBufferListAssociateContext0
FwpsNetBufferListGetTagForContext0
FwpsNetBufferListRemoveContext0