Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Untuk sebagian besar jenis peran fungsi, SDV mengasumsikan bahwa driver memiliki, paling banyak, satu fungsi panggilan balik untuk setiap titik masuk. Namun, ada beberapa jenis peran fungsi yang dapat memiliki beberapa fungsi panggilan balik peristiwa yang terkait dengannya. Misalnya, driver KMDF mungkin memiliki beberapa fungsi panggilan balik EvtTimerFunc atau EvtDpcFunc (yang menggunakan anotasi jenis peran EVT_WDF_TIMER dan EVT_WDF_DPC). Dalam hal ini, SDV menambahkan bilangan bulat ke jenis fungsi di Sdv-map.h. Misalnya, jika driver Anda memiliki dua fungsi panggilan balik DPC, SDV memetakannya ke fun_WDF_DPC_1 dan fun_WDF_DPC_2.
Jika driver melebihi jumlah maksimum fungsi panggilan balik untuk jenis peran, SDV menampilkan pesan berikut.
Static Driver Verifier found more than one entry point for '[role type]'
Jika jenis peran fungsi memiliki lebih banyak titik masuk daripada yang didukung SDV, belum tentu ada yang salah dengan driver. Namun, untuk mendapatkan hasil verifikasi yang akurat, Anda harus mengedit file Sdv.-map.h untuk menghapus entri duplikat.
Misalnya, file Sdv-map.h berikut menunjukkan bahwa ada dua fungsi CompletionRoutine yang diannotasi menggunakan jenis peran EVT_WDF_REQUEST_COMPLETION_ROUTINE. Dalam file Sdv-map.h, SDV menentukan EvtRequestReadCompletionRoutine dan EvtRequestWriteCompletionRoutine sebagai fun_WDF_REQUEST_COMPLETION_ROUTINE.
//Approved=false
#define fun_WDF_DRIVER_DEVICE_ADD OsrFxEvtDeviceAdd
#define fun_WDF_IO_QUEUE_IO_READ OsrFxEvtIoRead
#define fun_WDF_IO_QUEUE_IO_STOP OsrFxEvtIoStop
#define fun_WDF_DEVICE_D0_EXIT OsrFxEvtDeviceD0Exit
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
#define fun_WDF_OBJECT_CONTEXT_CLEANUP OsrFxEvtDriverContextCleanup
#define fun_WDF_DEVICE_D0_ENTRY OsrFxEvtDeviceD0Entry
#define fun_WDF_DEVICE_PREPARE_HARDWARE OsrFxEvtDevicePrepareHardware
#define fun_WDF_IO_QUEUE_IO_WRITE OsrFxEvtIoWrite
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL OsrFxEvtIoDeviceControl
Untuk menghapus duplikasi, komentari rutinitas penyelesaian kedua (ganti #d di #define dengan dua pemisah komentar (//). Kemudian atur Approved=true dan jalankan verifikasi.
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
Setelah Anda melihat hasil verifikasi dengan rutinitas penyelesaian satu, edit file Sdv-map.h lagi, tetapi kali ini komentari rutinitas penyelesaian yang baru saja diverifikasi dan hapus komentar (ganti // dengan #d) dari rutinitas penyelesaian yang tidak diverifikasi. Kemudian jalankan SDV lagi.
Jenis peran fungsi yang mendukung beberapa titik masuk
Beberapa jenis peran fungsi mendukung beberapa entri. Ketika jumlah entri melebihi maksimum yang didukung, SDV juga melaporkannya sebagai entri duplikat. Anda dapat memperlakukan entri tambahan ini dengan cara yang sama seperti Anda menangani entri duplikat, dengan secara selektif mengomentari pernyataan #define untuk rutinitas panggilan balik dalam file Sdv-map.h dan membuat verifikasi terpisah. Misalnya, jika driver Anda memiliki delapan fungsi panggilan balik DPC (yang menggunakan jenis peran EVT_WDF_DPC), Anda dapat melakukan hal berikut:
Edit Sdv-map.h dan komentari pernyataan yang ditentukan untuk fun_WDF_DPC_5 melalui fun_WDF_DPC_8.
Jalankan SDV pada driver.
Kemudian edit Sdv-map.h lagi untuk menentukan fun_WDF_DPC_5 sampai dengan fun_WDF_DPC_8 dan mengomentari pernyataan define untuk fun_WDF_DPC_1 sampai dengan fun_WDF_DPC_4.
Jalankan SDV pada driver.
Lihat Pemverifikasi Driver Statis KMDF Anotasi untuk daftar jenis peran fungsi yang dapat memiliki lebih dari satu fungsi panggilan balik. Daftar menunjukkan jumlah maksimum fungsi panggilan balik yang didukung SDV untuk jenis peran tersebut.