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.
Gunakan aturan ini untuk memverifikasi bahwa driver Anda dapat memproses IRP dengan benar dalam berbagai konteks dan mengikuti praktik terbaik yang direkomendasikan Microsoft.
Di bagian ini
| Topik | Deskripsi |
|---|---|
Aturan DeferredRequestCompleted menentukan bahwa jika permintaan I/O yang disajikan ke antrean I/O default driver tidak diselesaikan dalam fungsi panggilan balik tetapi ditangguhkan untuk diproses nanti, permintaan harus diselesaikan dalam fungsi panggilan balik pemrosesan yang ditangguhkan, kecuali permintaan diteruskan dan dikirimkan ke kerangka kerja, atau kecuali metode WdfRequestStopAcknowledge dipanggil. |
|
Aturan DriverAttributeChanged menentukan bahwa driver tidak boleh mengubah tingkat eksekusi atau cakupan sinkronisasi driver KMDF. |
|
Aturan DrvAckIoStop memverifikasi bahwa driver mengetahui permintaan yang tertunda saat antrean yang dikelola dayanya mulai dimatikan dan driver mengakui, menyelesaikan, atau membatalkan permintaan yang tertunda yang sesuai. Dalam kasus permintaan I/O yang dikelola sendiri, driver juga harus menangani permintaan ini dengan benar dari fungsi EvtDeviceSelfManagedIoSuspend-nya . Driver yang gagal menangani permintaan ini selama pemadaman akan menyebabkan Pemeriksaan Bug 0x9F: DRIVER_POWER_STATE_FAILURE. |
|
Aturan EvtIoResumeGetParam menentukan bahwa WdfRequestGetParameters tidak dipanggil dalam fungsi panggilan balik EvtIoResumeGetParam . |
|
Aturan EvtIoStopGetParam memeriksa bahwa WdfRequestGetParameters tidak dipanggil dalam panggilan balik EvtIoStop . |
|
Aturan EvtIoStopResume menentukan bahwa jika driver mendaftarkan fungsi panggilan balik EvtIoStop dan kemudian memanggil WdfRequestStopAcknowledge dengan parameter Requeue sama dengan FALSE, driver harus mendaftarkan fungsi panggilan balik EvtIoResume . Kerangka kerja mengirimkan permintaan ke fungsi panggilan balik EvtIoResume saat perangkat memasuki status D0 lagi. |
|
Aturan EvtSurpriseRemoveNoRequestComplete menentukan bahwa driver WDF tidak boleh menyelesaikan permintaan dari panggilan balik EvtDeviceSurpriseRemoval , alih-alih fungsi panggilan balik I/O yang dikelola sendiri harus digunakan. Panggilan balik EvtDeviceSurpriseRemoval tidak disinkronkan dengan jalur power-down. |
|
Aturan FDOPowerPolicyOwnerAPI menentukan bahwa jika driver FDO melepaskan kepemilikan kebijakan daya, metode WdfDeviceInitSetPowerPolicyEventCallbacks, WdfDeviceAssignS0IdleSettings, dan WdfDeviceAssignSxWakeSettings hanya dapat dipanggil pada jalur eksekusi di mana driver adalah pemilik kebijakan daya. SDV mengeluarkan peringatan untuk aturan ini. |
|
Aturan NoCancelFromEvtSurpriseRemove menentukan bahwa Driver WDF tidak boleh membatalkan permintaan dari fungsi panggilan balik EvtDeviceSurpriseRemoval , alih-alih fungsi panggilan balik I/O yang dikelola sendiri harus digunakan. Fungsi panggilan balik EvtDeviceSurpriseRemoval tidak disinkronkan dengan jalur power-down. |
|
Aturan PagedCodeAtD0 menentukan bahwa driver tidak boleh menandai kode sebagai dapat di-pageable dalam fungsi panggilan balik yang ada di jalur kode power-up. |
|
Aturan ParentObjectCheck menentukan bahwa driver harus memanggil WdfMemoryCreate yang menentukan objek induk menggunakan struktur WDF_OBJECT_ATTRIBUTES . Jika driver tidak mengatur objek induk untuk objek memori kerangka kerja maka kerangka kerja mengatur driver sebagai induk default, sehingga kecuali driver menghapus objek memori kerangka kerja secara eksplisit akan tetap berada di memori sampai objek driver dibongkar. |
|
Aturan ReqNotCanceledLocal menentukan bahwa jika permintaan yang ditandai sebagai dapat dibatalkan diselesaikan dalam fungsi panggilan balik antrean I/O default, metode WdfRequestUnmarkCancelable harus dipanggil pada permintaan I/O sebelum selesai. Permintaan I/O harus diselesaikan, kecuali permintaan dibatalkan sebelum memanggil WdfRequestUnmarkCancelable. |
|
Aturan ReqSendFail menentukan bahwa driver harus mengatur status penyelesaian yang benar dalam kasus di mana metode WdfRequestSend mungkin gagal. |
|
Aturan RequestCompletedLocal menentukan bahwa jika permintaan I/O tidak diselesaikan di salah satu EvtIoDefault, Fungsi panggilan balik EvtIoRead, EvtIoWrite, EvtIoDeviceControl, dan EvtIoInternalDeviceControl , dan jika WdfRequestMarkCancelable tidak dipanggil pada permintaan dalam fungsi panggilan balik, mungkin ada masalah dengan penyelesaian permintaan dalam kode driver. |
|
Jika driver klien memanggil WdfUsbTargetDeviceCreateWithParameters dan menentukan versi kontrak klien USBD_CLIENT_CONTRACT_VERSION_602 dalam struktur WDF_USB_DEVICE_CREATE_CONFIG (untuk menggunakan kemampuan baru tumpukan driver USB untuk Windows 8), DDI yang menggunakan URB secara internal hanya akan menggunakan konteks URB jika salah satu prasyarat berikut berlaku: |
|
Aturan SyncReqSend menentukan bahwa semua permintaan pengiriman sinkron dilakukan dengan menggunakan metode antarmuka driver perangkat KMDF khusus sinkron, dan bahwa metode memiliki nilai batas waktu bukan nol yang ditetapkan. |
|
Aturan SyncReqSend2 menentukan bahwa permintaan sinkron yang dikirim memiliki nilai batas waktu nonzero yang ditetapkan. |
Untuk memilih seperangkat aturan Peringatan
Pilih proyek driver Anda (.vcxProj) di Microsoft Visual Studio. Dari menu Driver , klik Luncurkan Pemverifikasi Driver Statis....
Klik tab Aturan . Di bawah Seperangkat Aturan, pilih Peringatan.
Untuk memilih seperangkat aturan default dari jendela prompt perintah pengembang Visual Studio, tentukan Warning.sdv dengan opsi /check . Contohnya:
msbuild /t:sdv /p:Inputs="/check:Warning.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat dalam perintah Driver dan Verifier Driver Statis (MSBuild).