Nama Version-Independent WFP dan Penargetan Versi Windows Tertentu

Dalam banyak kasus, API Windows Filtering Platform (WFP) menyediakan lebih dari satu versi fungsi atau struktur.

Sebagian besar nama data dan fungsi di API WFP diakhapi dengan nomor versi, seperti "0" atau "1", bahkan jika hanya ada satu versi.

Pemetaan Versi di fwpvi.h

File header fwpvi.h disertakan dimulai dengan Windows 7 SDK dan WDK. File header ini memetakan nama API tanpa versi ke versi yang sesuai untuk digunakan dengan sistem operasi tertentu.

Misalnya, berikut adalah kutipan singkat dari versi fwpvi.h yang disertakan dalam SDK Windows 8.

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

Seperti yang ditunjukkan di atas, hanya ada satu versi FwpmNetEventCreateEnumHandleFwpmNetEventCreateEnumHandle0 – sehingga setiap panggilan ke FwpmNetEventCreateEnumHandle akan selalu memanggil FwpmNetEventCreateEnumHandle0, terlepas dari sistem operasi yang ditargetkan.

Namun, ada tiga versi FwpmNetEventEnum: FwpmNetEventEnum0, FwpmNetEventEnum1, dan FwpmNetEventEnum2. File header fwpvi.h memastikan bahwa panggilan ke FwpmNetEventEnum akan memanggil versi yang paling sesuai dengan sistem operasi yang ditargetkan:

Memanggil Fungsi dan Struktur Version-Independent

Pengembang WFP yang menargetkan sistem operasi atau versi WDK tertentu didorong untuk selalu memprogram makro yang independen versinya. Ini akan secara otomatis memilih versi terbaru yang didukung dalam sistem operasi yang Anda targetkan. Penggunaan file header terbaru direkomendasikan, bahkan ketika menargetkan sistem operasi sebelumnya. Melakukan ini secara konsisten akan memastikan versi terbaru yang didukung digunakan, dan juga dapat mempermudah pemeliharaan dan pembaruan kode Anda.

Dokumentasi referensi WFP API menjelaskan setiap versi API bernomor. Jika ada lebih dari satu versi, sistem operasi yang ditargetkan akan dicatat. Namun, pengembang umumnya ingin memanggil API independen versi (tanpa angka), dan menunjukkan sistem operasi yang ditargetkan (seperti NTDDI_WIN6 untuk Windows Vista atau NTDDI_WIN8 untuk Windows 8).

Untuk memastikan penanganan fungsi yang tepat yang mengambil parameter yang berbeda dalam versi yang berbeda, Anda dapat menyertakan blok bersyarat seperti #if (NTDDI_VERSION >= NTDDI_WIN7).