WFP Version-Independent 이름 및 특정 버전의 Windows 대상 지정

대부분의 경우 WFP(Windows 필터링 플랫폼) API는 둘 이상의 함수 또는 구조체 버전을 제공합니다.

WFP API의 대부분의 데이터 및 함수 이름은 버전이 하나만 있는 경우에도 "0" 또는 "1"과 같은 버전 번호로 끝납니다.

fwpvi.h의 버전 매핑

fwpvi.h 헤더 파일은 Windows 7 SDK 및 WDK부터 포함됩니다. 이 헤더 파일은 버전 없는 API 이름을 지정된 운영 체제에서 사용하기에 적합한 버전에 매핑합니다.

예를 들어 다음은 Windows 8 SDK에 포함된 fwpvi.h 버전에서 간략하게 발췌한 것입니다.

#define FwpmNetEventCreateEnumHandle FwpmNetEventCreateEnumHandle0
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define FwpmNetEventEnum FwpmNetEventEnum2
#elif (NTDDI_VERSION >= NTDDI_WIN7)
#define FwpmNetEventEnum FwpmNetEventEnum1
#else
#define FwpmNetEventEnum FwpmNetEventEnum0
#endif

위와 같이 FwpmNetEventCreateEnumHandleFwpmNetEventCreateEnumHandle0 의 버전은 하나뿐이므로 FwpmNetEventCreateEnumHandle 에 대한 호출은 대상 운영 체제에 관계없이 항상 FwpmNetEventCreateEnumHandle0을 호출합니다.

그러나 FwpmNetEventEnum에는 FwpmNetEventEnum0, FwpmNetEventEnum1FwpmNetEventEnum2의 세 가지 버전이 있습니다. fwpvi.h 헤더 파일은 FwpmNetEventEnum 에 대한 호출이 대상 운영 체제에 가장 적합한 버전을 호출하도록 합니다.

Version-Independent 함수 및 구조 호출

특정 운영 체제 또는 WDK 버전을 대상으로 하는 WFP 개발자는 항상 버전 독립적 매크로에 대해 프로그래밍하는 것이 좋습니다. 이렇게 하면 대상으로 하는 운영 체제에서 지원되는 최신 버전이 자동으로 선택됩니다. 이전 운영 체제를 대상으로 하는 경우에도 최신 헤더 파일을 사용하는 것이 좋습니다. 이 작업을 일관되게 수행하면 지원되는 최신 버전이 사용되고 코드를 더 쉽게 유지 관리하고 업데이트할 수 있습니다.

WFP API 참조 설명서에서는 번호가 매겨진 API의 각 버전에 대해 설명합니다. 둘 이상의 버전이 있는 경우 대상 운영 체제가 기록됩니다. 그러나 개발자는 일반적으로 버전 독립적(번호 없는) API를 호출하고 대상 운영 체제(예: Windows Vista용 NTDDI_WIN6 또는Windows 8 NTDDI_WIN8)를 나타내려고 합니다.

다른 버전에서 서로 다른 매개 변수를 사용하는 함수를 적절하게 처리하려면 과 같은 #if (NTDDI_VERSION >= NTDDI_WIN7)조건부 블록을 포함할 수 있습니다.