Bagikan melalui


Penamaan dan Penargetan Versi Tertentu dari Windows oleh WFP Version-Independent

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

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

Pemetaan Versi di fwpvi.h

File header fwpvi.h mulai disertakan dalam SDK dan WDK Windows 7. 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 Windows 8 SDK.

#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 – jadi 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 menggunakan makro yang tidak bergantung pada versi. Ini akan secara otomatis memilih versi terbaru yang didukung dalam sistem operasi yang Anda targetkan. Penggunaan file header terbaru disarankan, bahkan saat menargetkan sistem operasi sebelumnya. Melakukan ini secara konsisten akan memastikan versi terbaru yang didukung digunakan, dan juga dapat mempermudah untuk mempertahankan dan memperbarui 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 nomor), 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).