Bagikan melalui


Seperangkat aturan peringatan (KMDF)

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

DeferredRequestCompleted

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.

DriverAttributeChanged

Aturan DriverAttributeChanged menentukan bahwa driver tidak boleh mengubah tingkat eksekusi atau cakupan sinkronisasi driver KMDF.

DrvAckIoStop

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.

EvtIoResumeGetParam

Aturan EvtIoResumeGetParam menentukan bahwa WdfRequestGetParameters tidak dipanggil dalam fungsi panggilan balik EvtIoResumeGetParam .

EvtIoStopGetParam

Aturan EvtIoStopGetParam memeriksa bahwa WdfRequestGetParameters tidak dipanggil dalam panggilan balik EvtIoStop .

EvtIoStopResume

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.

EvtSurpriseRemoveNoRequestComplete

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.

FDOPowerPolicyOwnerAPI

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.

NoCancelFromEvtSurpriseRemove

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.

PagedCodeAtD0

Aturan PagedCodeAtD0 menentukan bahwa driver tidak boleh menandai kode sebagai dapat di-pageable dalam fungsi panggilan balik yang ada di jalur kode power-up.

ParentObjectCheck

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.

ReqNotCanceledLocal

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.

ReqSendFail

Aturan ReqSendFail menentukan bahwa driver harus mengatur status penyelesaian yang benar dalam kasus di mana metode WdfRequestSend mungkin gagal.

RequestCompletedLocal

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.

RequestForUrbXrb

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:

SyncReqSend

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.

SyncReqSend2

Aturan SyncReqSend2 menentukan bahwa permintaan sinkron yang dikirim memiliki nilai batas waktu nonzero yang ditetapkan.

Untuk memilih seperangkat aturan Peringatan

  1. Pilih proyek driver Anda (.vcxProj) di Microsoft Visual Studio. Dari menu Driver , klik Luncurkan Pemverifikasi Driver Statis....

  2. 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=Win32
    

    Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat dalam perintah Driver dan Verifier Driver Statis (MSBuild).