Procesamiento de llamadas de clasificación asincrónica
Un controlador de llamada de PMA puede autorizar o denegar una operación de red, o admitir o descartar un paquete de red, devolviendo los tipos de acción FWP_ACTION_PERMIT, FWP_ACTION_CONTINUE o FWP_ACTION_BLOCK de la función de llamada classifyFn . Con frecuencia, un controlador de llamada no puede devolver una decisión de inspección de su función classifyFn hasta que la información indicada, como campos clasificables, metadatos o paquetes, se puede reenviar para su procesamiento a otro componente, como una aplicación en modo de usuario. En estos casos, es posible que tenga que tomar una decisión de forma asincrónica en algún momento posterior.
Reglas generales para el procesamiento asincrónico
EL PMA admite el procesamiento asincrónico de la función de llamada classifyFn . Sin embargo, el mecanismo para hacer esto difiere según las diferentes capas.
Clasificación asincrónica de ALE
Un controlador de llamada debe llamar a la función FwpsPendOperation0 desde classifyFn. La operación asincrónica debe completarse con una llamada a la función FwpsCompleteOperation0 .
Clasificación asincrónica de paquetes
Un controlador de llamada debe devolver FWP_ACTION_BLOCK de la función classifyFn , con la marca FWPS_CLASSIFY_OUT_FLAG_ABSORB establecida. Los paquetes de red se deben hacer referencia o clonar. La operación asincrónica se completa mediante la reinjeción del paquete clonado o modificado o descartando silenciosamente el paquete.
Clasificación asincrónica de ALE que incluye paquetes
Se usa una combinación de los dos procedimientos anteriores: la operación de clasificación se inserta en lápiz y el paquete se hace referencia o clona, y en algún momento después se completa la llamada a classifyFn y el paquete clonado se reinyecte o descarta.
Casos y consideraciones especiales
ALE Connect frente a Receive/Accept Layers
Cuando se llama a FwpsCompleteOperation0 para completar una operación de clasificación con lápiz en una capa de conexión de ALE (FWPS_LAYER_ALE_AUTH_CONNECT_V4 o FWPS_LAYER_ALE_AUTH_CONNECT_V6), se desencadena una operación de clasificación de reauthorización de ALE en la capa de conexión de ALE correspondiente. El controlador de llamada debe devolver una decisión de inspección de esta operación de clasificación de reauthorización. Puede detectar una operación de clasificación de reauthorización de ALE comprobando si la marca de FWP_CONDITION_FLAG_IS_REAUTHORIZE está establecida.
El controlador de llamada debe mantener un estado único para cada operación de clasificación de ALE_AUTH_CONNECT en lápiz de forma que la decisión de inspección de cada operación de clasificación se pueda buscar durante una reauthorización desencadenada por FwpsCompleteOperation0. Si se hace referencia a los paquetes o se clonan durante una operación de clasificación de ALE_AUTH_CONNECT con lápiz (por ejemplo, para conexiones que no son TCP), se pueden reinyectar después de que se produzca la reauthorización.
Cuando se llama a FwpsCompleteOperation0 durante una operación de clasificación en una capa de recepción o aceptación de ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 o FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6), FwpsCompleteOperation0 no desencadena una reauthorización de ALE. En su lugar, se vuelve a realizar una nueva llamada a classifyFn cuando se reinyecte el paquete clonado si la modificación no era lo suficientemente significativa como para omitir el filtro. Permitir el clon autoinyectado de la capa de ALE_RECV_ACCEPT autoriza eficazmente la conexión entrante. Si no se permite la conexión entrante, descarte el paquete entrante después de llamar a FwpsCompleteOperation0.
Reauthorización de ALE
Un controlador de llamada se puede reclasificar en una capa de conexión de ALE o recepción o aceptación para eventos como un cambio de directiva (por ejemplo, agregar o quitar un filtro en la capa), detectar una nueva interfaz de llegada y volver a claver una conexión mediante IPsec. Dicha reauthorización no se puede escribir mediante una llamada a FwpsCompleteOperation0 y no es necesario hacerlo. Un controlador de llamada debe usar las reglas enumeradas anteriormente para procesar paquetes que se indican durante la reauthorización.
Tenga en cuenta que tanto el paquete entrante como el saliente se pueden volver a autenticar en capas de ALE_AUTH_CONNECT o ALE_RECV_ACCEPT. Por ejemplo, se puede volver a autorizar un paquete entrante en la capa de ALE_AUTH_CONNECT. Un controlador de llamada no debe asumir que la dirección del paquete es la misma que la dirección de la conexión.
capas de ALE_FLOW_ESTABLISHED
El procesamiento asincrónico no se admite en estas capas (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 o FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6).
capas de INBOUND_TRANSPORT
Un controlador de llamada no debe realizar el procesamiento asincrónico de paquetes que requieren el procesamiento de clasificación de ALE en una capa de transporte entrante (entrante) (FWPS_LAYER_INBOUND_TRANSPORT_V4 o FWPS_LAYER_INBOUND_TRANSPORT_V6). Esto puede interferir con la creación de flujos. Cuando EL PMA llama a la función de llamada classifyFn en una capa de transporte entrante, establece la marca de FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED para esos paquetes que requieren el procesamiento de clasificación de ALE. Un controlador de llamada debe permitir estos paquetes de una capa de INBOUND_TRANSPORT y aplazar su procesamiento hasta que lleguen a una capa de ALE_RECV_ACCEPT.
Capas de STREAM
En una capa de flujo (FWPS_LAYER_STREAM_V4 o FWPS_LAYER_STREAM_V6), los segmentos de datos TCP se indican en lugar de un encabezado IP o TCP. La capa de secuencia también es donde se puede indicar una cadena de listas de búferes netos en una llamada a la función de llamada classifyFn . EL PMA pone a disposición funciones especializadas de clonación e inyección, FwpsCloneStreamData0 y FwpsStreamInjectAsync0, para las llamadas de capa de secuencia que se van a usar.
Debido a la naturaleza de entrega ordenada de los datos de la capa de flujo, un controlador de llamada debe seguir clonando y absorbiendo datos siempre que los datos de flujo sigan pendientes. La combinación de operaciones asincrónicas y sincrónicas para un flujo de flujo determinado puede dar lugar a un comportamiento indefinido.