WFP Version-Independent Namen und Zielgruppenspezifische Windows-Versionen
In vielen Fällen stellt die WFP-API (Windows Filtering Platform) mehr als eine Version einer Funktion oder Struktur bereit.
Die meisten Daten- und Funktionsnamen in der WFP-API enden mit einer Versionsnummer, z. B. "0" oder "1", auch wenn es nur eine Version gibt.
Versionszuordnung in fwpvi.h
Die Fwpvi.h-Headerdatei ist ab dem Windows 7 SDK und WDK enthalten. Diese Headerdatei ordnet den versionslosen API-Namen der Version zu, die für die Verwendung mit einem bestimmten Betriebssystem geeignet ist.
Hier finden Sie beispielsweise einen kurzen Auszug aus der Version von fwpvi.h, die im Windows 8 SDK enthalten ist.
#define FwpmNetEventCreateEnumHandle FwpmNetEventCreateEnumHandle0
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define FwpmNetEventEnum FwpmNetEventEnum2
#elif (NTDDI_VERSION >= NTDDI_WIN7)
#define FwpmNetEventEnum FwpmNetEventEnum1
#else
#define FwpmNetEventEnum FwpmNetEventEnum0
#endif
Wie oben gezeigt, gibt es nur eine Version von FwpmNetEventCreateEnumHandle – FwpmNetEventCreateEnumHandle0 – sodass jeder Aufruf von FwpmNetEventCreateEnumHandle immer FwpmNetEventCreateEnumHandle0 aufruft, unabhängig vom jeweiligen Betriebssystem.
Es gibt jedoch drei Versionen von FwpmNetEventEnum: FwpmNetEventEnum0, FwpmNetEventEnum1 und FwpmNetEventEnum2. Die Fwpvi.h-Headerdatei stellt sicher, dass ein Aufruf von FwpmNetEventEnum die Version aufruft, die für das Zielbetriebssystem am besten geeignet ist:
- FwpmNetEventEnum2 für Windows 8 (oder höher)
- FwpmNetEventEnum1 für Windows 7 ist als Ziel vorgesehen
- FwpmNetEventEnum0 für frühere Betriebssysteme (z. B. Windows Vista oder Windows Vista mit Service Pack 1 (SP1))
Aufrufen Version-Independent Funktionen und Strukturen
WFP-Entwickler, die auf eine bestimmte Betriebssystem- oder WDK-Version abzielen, werden empfohlen, immer mit den versionsunabhängigen Makros zu programmieren. Dadurch wird automatisch die neueste Version ausgewählt, die in dem Von Ihnen gewünschten Betriebssystem unterstützt wird. Die Verwendung der neuesten Headerdateien wird empfohlen, auch wenn sie auf ein früheres Betriebssystem abzielen. Dadurch wird sichergestellt, dass die neueste unterstützte Version verwendet wird, und es kann auch einfacher sein, Ihren Code zu verwalten und zu aktualisieren.
Die WFP-API-Referenzdokumentation beschreibt jede Version einer nummerierten API. Wenn mehrere Versionen vorhanden sind, wird das Zielbetriebssystem notiert. Entwickler möchten jedoch in der Regel die versionsunabhängigen APIs aufrufen und das Zielbetriebssystem angeben (z. B. NTDDI_WIN6 für Windows Vista oder NTDDI_WIN8 für Windows 8).
Um eine ordnungsgemäße Behandlung von Funktionen sicherzustellen, die unterschiedliche Parameter in verschiedenen Versionen verwenden, können Sie bedingte Blöcke wie #if (NTDDI_VERSION >= NTDDI_WIN7)
einschließen.