API DE PMA
La API de la Plataforma de filtrado de Windows (PMA) se divide en los siguientes componentes.
Componente | Descripción | Archivos de encabezado |
---|---|---|
API de llamada (FWPS)${REMOVE}$ |
Tipos de datos usados por las llamadas. Nota Estos tipos de datos se documentan en el Kit de desarrollo de controladores de Microsoft Windows (DDK). |
fwpstypes.idl |
Funciones y tipos enumerados usados para implementar llamadas. Nota Estas funciones y tipos enumerados se documentan en DDK. |
fwpsk.h |
|
API de IKE/AuthIP (IKEEXT)${REMOVE}$ |
Tipos y estructuras enumerados que se usan para administrar las asociaciones de seguridad y directivas de modo principal de IKE y AuthIP (MM). |
iketypes.idl |
Funciones que se usan para administrar asociaciones de seguridad y directivas IKE y AuthIP MM. |
fwpmk.h |
|
API de IPsec (IPSEC)${REMOVE}$ |
Tipos y estructuras enumerados usados para administrar las directivas de IPsec y las asociaciones de seguridad. |
ipsectypes.idl |
Funciones que se usan para administrar las directivas de IPsec y las asociaciones de seguridad. |
fwpmk.h |
|
API de administración (FWPM)${REMOVE}$ |
Tipos y estructuras enumerados que se usan para administrar el motor de filtro. |
fwpmtypes.idl |
Funciones usadas para administrar el motor de filtro. Estas funciones se usan para realizar las siguientes tareas:
|
fwpmk.h |
|
API compartida (FWP) | Tipos y estructurasenumerados fundamentales compartidos en la Plataforma de filtrado de Windows. |
fwptypes.idl |
Los nombres de tipo de datos están delimitados en mayúsculas y de subrayado. El nombre siempre comienza con un prefijo que identifica su grupo de componentes, como FWPM_PROVIDER0.
Los nombres de función son delimitados por mayúsculas y minúsculas mixtas. El nombre siempre comienza con un prefijo que identifica su grupo de componentes, como FwpmProviderContextAdd0.
La mayoría de los nombres de datos y funciones terminan con un número de versión. El archivo de encabezado fwpvi.h asigna los nombres de función y datos independientes de la versión a la versión adecuada para su uso con un sistema operativo determinado. Para obtener más información, vea PMA Version-Independent Nombres y versiones específicas de destino de Windows.
Cada componente no es independiente. Por ejemplo, las directivas de modo principal de IKE (MM) se definen en el componente IKEEXT, pero se almacenan en un contexto de proveedor y están asociadas a un filtro que se encuentran en el componente de LA API fwpm.
Se puede llamar a la mayoría de las funciones de PMA desde el modo de usuario o el modo kernel. Sin embargo, las funciones en modo de usuario devuelven un valor DWORD que representa un código de error win32, mientras que las funciones en modo kernel devuelven un valor NTSTATUS que representa un código de estado NT. Como resultado, los nombres de función y la semántica son idénticos entre el modo de usuario y el modo kernel, pero las firmas de función no lo son. Esto requiere encabezados específicos del modo de usuario y del modo kernel independientes para los prototipos de función. Los nombres de archivo de encabezado en modo de usuario terminan en "u" y los nombres de archivo de encabezado en modo kernel terminan en "k".
En la tabla siguiente se enumeran los archivos de encabezado win32 que definen las funciones de PMA.
Archivos de encabezado | Descripción |
---|---|
fwpmk.h | Prototipos de función en modo kernel para componentes FWPM, IPsec e IKEEXT. Solo está disponible en DDK. |
fwpmu.h | Prototipos de función en modo usuario para componentes FWPM, IPsec e IKEEXT. Solo está disponible en el Kit de desarrollo de software (SDK) de Microsoft Windows. |
fwpsk.h | Prototipos de función en modo kernel y tipos enumerados para el componente FWPS. Solo está disponible en DDK. |
fwpsu.h | Prototipos de función en modo de usuario y tipos enumerados para el componente FWPS. Solo está disponible en Windows SDK. Nota Los tipos enumerados de FWPS en modo de usuario son idénticos a los tipos enumerados de FWPS en modo kernel. En consecuencia, estos tipos solo se documentan en el DDK. Nota Los prototipos de función FWPS en modo de usuario son idénticos a los prototipos de función FWPS en modo kernel con la excepción del código de retorno. Las funciones FWPS en modo de usuario devuelven un DWORD, mientras que las funciones FWPS en modo kernel devuelven un NTSTATUS. En consecuencia, estas funciones solo se documentan en el DDK. |
Todas las funciones en modo de usuario se exportan desde fwpuclnt.dll. Todas las funciones en modo kernel se exportan desde fwpkclnt.sys.
La mayoría de los tipos de datos FWPM, que se usan para tareas de administración, como agregar filtros o llamadas desde una aplicación o controlador, tienen homólogos de FWPS. Los tipos de datos FWPS se usan durante el filtrado real del tráfico de red, en el contexto de una rutina de llamada para la clasificación.
Por ejemplo, para agregar un filtro a una capa de motor de filtrado determinada, el programador debe usar un tipo FWPM, como: filter.layerKey = FWPM_LAYER_INBOUND_IPPACKET
. Para comprobar desde qué capa se llama a una llamada, el programador debe usar el tipo FWPS correspondiente: if (inFixedValues->layerId == FWPS_LAYER_INBOUND_IPPACKET)
.
Algunos homólogos de FWPS para los tipos de datos FWPM están expandiendo los tipos de datos FWPM originales. Por ejemplo, para agregar una condición de filtro en muchas capas del motor de filtrado, el programador especifica independientemente filterCondition.fieldKey = FWPM_CONDITION_IP_PROTOCOL
de la capa del motor de filtrado. Para buscar un valor de condición de filtro, el programador especifica un tipo de FWPS específico de capa, como: inFixedValues->incomingValue[FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL]
.
Los tipos de datos FWPS suelen ser más pequeños que sus homólogos de FWPM. Por ejemplo, los identificadores de capa de filtrado FWPM son GUID(16 bytes), mientras que los identificadores de capa de filtrado FWPS son UINT16 (16 bits). El tamaño más pequeño para los tipos de datos FWPS mejora el rendimiento del sistema, ya que las comparaciones de enteros superan las comparaciones guid del tráfico en tiempo real. Además, la memoria del kernel se usa de forma eficaz, ya que todos los tipos FWPS se usan en el kernel para administrar los filtros, mientras que los tipos FWPM se almacenan en modo de usuario para administrar las distintas capas.