WFP-API
Die Windows-API (WFP) ist in die folgenden Komponenten unterteilt.
| Komponente | BESCHREIBUNG | Headerdateien |
|---|---|---|
| Callout-API (FWPS)${REMOVE}$ |
Datentypen, die von Rückrufen verwendet werden. Hinweis: Diese Datentypen sind im Microsoft Windows Driver Development Kit (DDK) dokumentiert. |
fwpstypes.idl |
| Funktionen und aufzählte Typen, die zum Implementieren von Rückrufen verwendet werden. Hinweis: Diese Funktionen und aufzählten Typen sind im DDK dokumentiert. |
fwpsk.h |
|
| IKE/AuthIP-API (IKEEXT)${REMOVE}$ |
Enumerierte Typen und Strukturen, die zum Verwalten von Richtlinien und Sicherheitszuordnungen im IKE- und AuthIP-Hauptmodus (MM) verwendet werden. |
iketypes.idl |
| Funktionen, die zum Verwalten von IKE- und AuthIP MM-Richtlinien und Sicherheitszuordnungen verwendet werden. |
fwpmk.h |
|
| IPsec-API (IPSEC)${REMOVE}$ |
Aufzählen von Typen und Strukturen, die zum Verwalten von IPsec-Richtlinien und Sicherheitszuordnungen verwendet werden. |
ipsectypes.idl |
| Funktionen, die zum Verwalten von IPsec-Richtlinien und Sicherheitszuordnungen verwendet werden. |
fwpmk.h |
|
| Verwaltungs-API (FWPM)${REMOVE}$ |
Enumerierte Typen und Strukturen, die zum Verwalten der Filter-Engine verwendet werden. |
fwpmtypes.idl |
Funktionen, die zum Verwalten der Filter-Engine verwendet werden. Diese Funktionen werden verwendet, um die folgenden Aufgaben auszuführen:
|
fwpmk.h |
|
| Freigegebene API (FWP) | Grundlegende enumerierte Typen und Strukturen, die von der Windows Filterplattform gemeinsam genutzt werden. |
fwptypes.idl |
Datentypnamen sind alle in Groß- und Unterstrichen getrennt. Der Name beginnt immer mit einem Präfix, das seine Komponentengruppe identifiziert, z. B. FWPM _ PROVIDER0.
Funktionsnamen werden in gemischter Und-Case-Ung mit Trennzeichen verwendet. Der Name beginnt immer mit einem Präfix, das seine Komponentengruppe identifiziert, z. B. FwpmProviderContextAdd0.
Die meisten Daten- und Funktionsnamen enden mit einer Versionsnummer. Die Headerdatei fwpvi.h ordnet versionsunabhängige Daten und Funktionsnamen der Version zu, die für die Verwendung mit einem bestimmten Betriebssystem geeignet ist. Weitere Informationen finden Sie unter WFP Version-Independent Names and Targeting Specific Versions of Windows.
Jede Komponente ist nicht allein. Beispielsweise werden RICHTLINIEN für den IKE-Hauptmodus (MM) in der IKEEXT-Komponente definiert, aber in einem Anbieterkontext gespeichert und einem Filter zugeordnet, die beide in der FWPM-API-Komponente enthalten sind.
User-Mode und Kernel-Mode öffentliche Headerdateien
Die meisten WFP-Funktionen können entweder im Benutzermodus oder im Kernelmodus aufgerufen werden. Benutzermodusfunktionen geben jedoch einen DWORD-Wert zurück, der einen Win32-Fehlercode darstellt, während Kernelmodusfunktionen einen NTSTATUS-Wert zurückgeben, der einen NT-Statuscode darstellt. Daher sind Funktionsnamen und Semantik zwischen Benutzermodus und Kernelmodus identisch, Funktionssignaturen jedoch nicht. Dies erfordert separate benutzer- und kernelmodusspezifische Header für die Funktionsprototypen. Headerdateinamen im Benutzermodus enden auf "u", und Headerdateinamen im Kernelmodus enden auf "k".
In der folgenden Tabelle sind die Win32-Headerdateien aufgeführt, die die WFP-Funktionen definieren.
| Headerdateien | BESCHREIBUNG |
|---|---|
| fwpmk.h | Funktionsprototypen im Kernelmodus für FWPM-, IPsec- und IKEEXT-Komponenten. Nur im DDK verfügbar. |
| fwpmu.h | Prototypen von Benutzermodusfunktionen für FWPM-, IPsec- und IKEEXT-Komponenten. Nur im Microsoft Windows Software Development Kit (SDK) verfügbar. |
| fwpsk.h | Prototypen von Kernelmodusfunktionen und aufzählte Typen für die FWPS-Komponente. Nur im DDK verfügbar. |
| fwpsu.h | Prototypen von Funktionen im Benutzermodus und aufzählte Typen für die FWPS-Komponente. Nur im Windows SDK verfügbar. Hinweis: Die aufzählten FWPS-Typen im Benutzermodus sind identisch mit den FWPS-enumerierten Typen im Kernelmodus. Daher sind diese Typen nur im DDK dokumentiert. Hinweis: Die Prototypen der FWPS-Funktion im Benutzermodus sind mit den Prototypen der FWPS-Funktion im Kernelmodus identisch, mit Ausnahme des Rückgabecodes. FWPS-Funktionen im Benutzermodus geben ein DWORD zurück, während FWPS-Funktionen im Kernelmodus ntstatus zurückgeben. Daher sind diese Funktionen nur im DDK dokumentiert. |
Alle Benutzermodusfunktionen werden aus der fwpuclnt.dll. Alle Kernelmodusfunktionen werden aus fwpkclnt.sys.
Verwaltungsdatentypen (FWPM) und Callout-Datentypen (FWPS)
Die meisten FWPM-Datentypen, die für Verwaltungsaufgaben wie das Hinzufügen von Filtern oder Rückrufen aus einer Anwendung oder einem Treiber verwendet werden, verfügen über FWPS-Entsprechungen. Die FWPS-Datentypen werden während der tatsächlichen Filterung des Netzwerkdatenverkehrs im Kontext einer Calloutroutine für die Klassifizierung verwendet.
Um beispielsweise einer bestimmten Filtermodulebene einen Filter hinzuzufügen, sollte der Programmierer einen FWPM-Typ wie verwenden: filter.layerKey = FWPM_LAYER_INBOUND_IPPACKET . Um zu überprüfen, von welcher Ebene eine Callout aufgerufen wird, sollte der Programmierer den entsprechenden FWPS-Typ verwenden: if (inFixedValues->layerId == FWPS_LAYER_INBOUND_IPPACKET) .
Einige FWPS-Entsprechungen zu FWPM-Datentypen erweitern die ursprünglichen FWPM-Datentypen. Um beispielsweise eine Filterbedingung auf vielen Filtermodulebenen hinzuzufügen, gibt der Programmierer unabhängig von der filterCondition.fieldKey = FWPM_CONDITION_IP_PROTOCOL Filtermodulebene an. Um einen Filterbedingungswert zu finden, gibt der Programmierer einen ebenenspezifischen FWPS-Typ an, z. B.: inFixedValues->incomingValue[FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL] .
Die FWPS-Datentypen sind im Allgemeinen kleiner als ihre FWPM-Entsprechungen. Die Bezeichner der FWPM-Filterebene sind z. B. GUIDs(16 Bytes), während die FWPS-Filterebenenbezeichner UINT16 (16 Bits) sind. Die kleinere Größe für FWPS-Datentypen verbessert die Systemleistung, da ganzzahlige Vergleiche GUID-Vergleiche für Echtzeitdatenverkehr überwiegen. Außerdem wird der Kernelspeicher effizient verwendet, da alle FWPS-Typen im Kernel zum Verwalten der Filter verwendet werden, während die FWPM-Typen im Benutzermodus gespeichert werden, um die verschiedenen Ebenen zu verwalten.