Tipos de llamadas
Los siguientes tipos de llamadas se pueden usar con EL PMA:
Llamada de inspección insertada
Este tipo de llamada siempre devuelve FWP_ACTION_CONTINUE de la función classifyFn y no modifica el tráfico de red de ninguna manera. Una llamada que recopila estadísticas de red es un ejemplo de este tipo de llamada.
Para este tipo de llamada, el tipo de acción de filtro (especificado por el miembro Type de la estructura FWPS_ACTION0) debe establecerse en FWP_ACTION_CALLOUT_INSPECTION.
Llamada de inspección fuera de banda
Este tipo de llamada no modifica el tráfico de red. En su lugar, aplaza cualquier inspección que se realice fuera de la función classifyFn por "pendiente" de los datos indicados y, a continuación, vuelve a expulsar los datos en lápiz en la pila TCP/IP con una de las funciones de inyección de paquetes. Pendiente se implementa mediante la primera clonación de los datos indicados, seguido de devolver FWP_ACTION_BLOCK de la función classifyFn que tiene el conjunto de bits FWPS_CLASSIFY_OUT_FLAG_ABSORB.
Llamada de modificación insertada
Este tipo de llamada modifica el tráfico de red realizando primero un clon de los datos indicados, modificando el clon y, finalmente, insertando el clon modificado en la pila TCP/IP de la función classifyFn . Este tipo de llamada también devuelve FWP_ACTION_BLOCK de la función classifyFn que tiene el FWPS_CLASSIFY_OUT_FLAG_ABSORB conjunto de bits.
El tipo de acción de filtro para este tipo de llamada debe establecerse en FWP_ACTION_CALLOUT_TERMINATING.
Llamada de modificación fuera de banda
Este tipo de llamada hace referencia primero al paquete indicado mediante la función FwpsReferenceNetBufferList0 que tiene el parámetro intentToModify establecido en TRUE. A continuación, la llamada devuelve FWP_ACTION_BLOCK con el conjunto de bits FWPS_CLASSIFY_OUT_FLAG_ABSORB de la función classifyFn. Cuando el paquete está listo para modificarse fuera de classifyFn, la llamada clona el paquete al que se hace referencia (en cuanto se clona, el paquete original se puede desreferenciar). A continuación, la llamada modifica el clon e inserta el paquete modificado en la pila TCP/IP.
El tipo de acción de filtro para este tipo de llamada debe establecerse en FWP_ACTION_CALLOUT_TERMINATING.
Llamada de redireccionamiento
Para obtener más información sobre este tipo de llamada, consulte Using Bind or Connect Redirection (Usar el redireccionamiento de enlace o conexión).
Hay dos tipos de llamadas de redireccionamiento:
- Una llamada de redirección de enlace permite al controlador de llamada modificar la dirección local y el puerto local de un socket.
- Una llamada de redirección de conexión permite al controlador de llamada modificar la dirección remota y el puerto remoto de una conexión.
El tipo de acción de filtro para este tipo de llamada debe establecerse en FWP_ACTION_PERMIT.
Para obtener más información sobre FWPS_CLASSIFY_OUT_FLAG_ABSORB, consulte FWPS_CLASSIFY_OUT0. Esta marca no es válida en ninguna capa de descarte del PMA. Devolver FWP_ACTION_BLOCK con la marca de FWPS_CLASSIFY_OUT_FLAG_ABSORB establecida a partir de la función classifyFn hace que el paquete se descarte silenciosamente, de modo que el paquete no alcance ninguna de las capas de descarte del PMA, ni hará que se generen eventos de auditoría.
Aunque las listas de búferes netos clonadas se pueden modificar, por ejemplo, agregando o quitando búferes netos o MDL, o ambas, las llamadas deben deshacer dichas modificaciones antes de llamar a la función FwpsFreeCloneNetBufferList0.
Para coexistir con otras llamadas que realizan la inspección de paquetes, la modificación de paquetes o la redirección de conexión, antes de que un paquete esté pendido con el mecanismo reference/clone-drop-reinject, una llamada debe "hard" quitar el paquete original borrando la marca FWPS_RIGHT_ACTION_WRITE en el miembro de derechos de la estructura FWPS_CLASSIFY_OUT0 devuelta por la función classifyFn. Si se establece la marca de FWPS_RIGHT_ACTION_WRITE cuando se llama a classifyFn (lo que significa que el paquete se podría insertar y volver a insertar o modificar más adelante), la llamada no debe lápiz la indicación y no debe cambiar el tipo de acción actual; y debe esperar a que se inserte una llamada de mayor peso para insertar el clon que se pueda modificar.
La marca FWPS_RIGHT_ACTION_WRITE debe establecerse cada vez que una llamada escribe una clasificación. El controlador de llamada debe probar la marca FWPS_RIGHT_ACTION_WRITE para comprobar los derechos de la llamada para devolver una acción. Si no se establece esta marca, la llamada todavía puede devolver una acción de FWP_ACTION_BLOCK con el fin de vetar una acción de FWP_ACTION_PERMIT que devolvió una llamada anterior. En el ejemplo que se muestra en Using a Callout for Deep Inspection (Usar una llamada para inspección profunda), la función simplemente sale si no se establece la marca.
La función FwpsPendOperation0 se usa para los paquetes en lápiz que se originan en las capas de filtrado de administración FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_XXX, FWPM_LAYER_ALE_AUTH_LISTEN_XXX o FWPM_LAYER_ALE_AUTH_CONNECT_XXX.
La función FwpsPendClassify0 se usa para pend paquetes que se originan en las siguientes capas de filtrado en tiempo de ejecución:
FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4 FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6 FWPS_LAYER_ALE_CONNECT_REDIRECT_V4 FWPS_LAYER_ALE_CONNECT_REDIRECT_V6 FWPS_LAYER_ALE_BIND_REDIRECT_V4 FWPS_LAYER_ALE_BIND_REDIRECT_V6