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 menyelesaikan atau membatalkan paket permintaan I/O (IRP) dengan benar.
Di bagian ini
| Topik | Deskripsi |
|---|---|
Aturan ChangeQueueState menetapkan bahwa driver WDF tidak berusaha mengubah status antrean dari beberapa utas secara bersamaan atau tidak memanggil DDI yang mengubah status satu demi satu dari dalam utas yang sama. Fungsi panggilan balik yang mengubah status antrean adalah WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurge, WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge, dan WdfIoQueueStopAndPurgeSynchronously. Jika DDI ini dipanggil ketika perubahan status Antrean sudah berlangsung, itu akan menyebabkan komputer mengalami crash atau menjadi tidak responsif. |
|
Aturan CompleteCanceledReq menentukan bahwa jika permintaan telah dibatalkan, permintaan tidak lagi valid, dan driver tidak boleh menyelesaikannya. Ketika pengemudi membatalkan penandaan permintaan yang sebelumnya ditandai bisa dibatalkan, ia harus memastikan bahwa permintaan tersebut belum dibatalkan. Jika driver tidak melakukan pemeriksaan ini, driver mungkin menyelesaikan permintaan yang telah dibebaskan. |
|
Aturan DoubleCompletion menentukan bahwa driver tidak boleh menyelesaikan permintaan I/O dua kali. Metode berikut tidak boleh dipanggil dua kali berturut-turut untuk permintaan yang sama: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
Aturan DoubleCompletionLocal menentukan bahwa driver tidak boleh menyelesaikan permintaan I/O dua kali. |
|
Aturan EvtIoStopCancel menentukan bahwa dalam fungsi panggilan balik EvtIoStop , driver memanggil salah satu metode berikut untuk permintaan I/O yang tidak dapat dibatalkan. |
|
Aturan EvtIoStopCompleteOrStopAck menentukan bahwa dalam fungsi panggilan balik EvtIoStop driver memanggil salah satu metode berikut untuk setiap permintaan I/O yang disajikan oleh kerangka kerja. Jika ini tidak dilakukan, sang driver mungkin memblokir sistem dari memasuki kondisi daya yang lebih rendah. |
|
Aturan EvtSurpriseRemoveNoSuspendQueue menentukan bahwa Driver WDF tidak boleh menguras, menghentikan, atau membersihkan antrean dari fungsi panggilan balik EvtDeviceSurpriseRemoval , sebagai gantinya fungsi panggilan balik I/O yang dikelola sendiri harus digunakan. Fungsi panggilan balik EvtDeviceSurpriseRemoval tidak disinkronkan dengan jalur power-down. |
|
Aturan FileObjectConfigured menentukan bahwa panggilan ke metode WdfRequestGetFileObject didahului oleh panggilan ke WdfDeviceInitSetFileObjectConfig. |
|
Aturan InternalIoctlReqs menentukan bahwa permintaan IOCTL internal tidak diteruskan ke antarmuka driver perangkat (DDI) pengiriman permintaan KMDF yang tidak sesuai. |
|
Aturan InvalidReqAccess menentukan bahwa permintaan tidak diakses setelah selesai atau dibatalkan. Aturan ini mungkin tumpang tindih dengan aturan lain, seperti aturan yang memeriksa penyelesaian ganda, atau aturan yang memeriksa permintaan telah ditandai dapat dibatalkan dua kali. |
|
Aturan InvalidReqAccessLocal menentukan bahwa permintaan yang dibuat secara lokal tidak diakses setelah selesai atau dibatalkan. Aturan ini mungkin tumpang tindih dengan aturan lain, seperti aturan yang memeriksa penyelesaian ganda, atau aturan yang memeriksa permintaan telah ditandai dapat dibatalkan dua kali. |
|
Aturan IoctlReqs menentukan bahwa permintaan IOCTL tidak boleh diteruskan ke permintaan KMDF yang tidak sesuai atau mengirim antarmuka driver perangkat (DDI). |
|
Aturan MarkCancOnCancReqLocal menentukan bahwa metode WdfRequestMarkCancelable tidak dapat dipanggil dua kali berturut-turut pada permintaan I/O yang sama. |
|
Aturan NoIoQueuePurgeSynchronously memverifikasi bahwa driver WDF tidak memanggil fungsi WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously, atau WdfIoQueuePurgeSynchronously dari fungsi callback event objek antrean EvtIO berikut: |
|
Aturan OutputBufferAPI menentukan bahwa DDI yang benar untuk pengambilan buffer digunakan dalam fungsi panggilan balik EvtIoWrite . Dalam fungsi panggilan balik EvtIoWrite , DDI berikut tidak dapat dipanggil untuk pengambilan buffer: |
|
Aturan ReadReqs menentukan bahwa permintaan baca tidak diteruskan ke metode KMDF yang tidak pantas. |
|
Aturan ReqCompletionRoutine menentukan bahwa rutinitas penyelesaian harus ditetapkan sebelum permintaan dikirim ke target I/O. |
|
Aturan ReqDelete menentukan bahwa permintaan yang dibuat driver tidak diteruskan ke fungsi WdfRequestCompleteXxx . Sebagai gantinya, permintaan harus dihapus setelah selesai. |
|
Aturan ReqIsCancOnCancReq menentukan bahwa metode WdfRequestIsCanceled hanya dapat dipanggil berdasarkan permintaan yang tidak ditandai sebagai dapat dibatalkan. |
|
Aturan ReqMarkCancelableSend menentukan bahwa permintaan yang diteruskan oleh driver tidak ditandai sebagai dapat dibatalkan dengan memanggil WdfRequestMarkCancelable. |
|
Aturan DeferredRequestCompleted menentukan bahwa untuk driver non-filter setiap permintaan yang masuk ke antrean I/O default driver harus diselesaikan, kecuali permintaan ditangguhkan atau diteruskan, atau jika WdfRequestStopAcknowledge dijalankan. |
|
Aturan RequestFormattedValid menentukan bahwa driver memformat semua permintaan, kecuali untuk permintaan WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, sebelum mengirimkannya ke target I/O. |
|
Aturan RequestGetStatusValid yang menentukan bahwa WdfRequestGetStatus harus dipanggil untuk permintaan dalam salah satu situasi berikut:
|
|
Aturan RequestSendAndForgetNoFormatting memverifikasi bahwa driver tidak memformat permintaan menggunakan fungsi pemformatan target I/O sebelum mengirimkannya ke target I/O dengan opsi kirim WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
Aturan RequestSendAndForgetNoFormatting2 memverifikasi bahwa driver tidak memformat permintaan menggunakan fungsi pemformatan target I/O sebelum mengirimkannya ke target I/O dengan opsi kirim WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
Aturan StopAckWithinEvtIoStop menentukan bahwa fungsi WdfRequestStopAcknowledge hanya dipanggil dari dalam fungsi panggilan balik EvtIoStop . |
|
Aturan WdfIoQueueFindRequestFailed menentukan bahwa WdfIoQueueRetrieveFoundRequest atau WdfObjectDereference hanya boleh dipanggil setelah WdfIoQueueFindRequestFailed mengembalikan STATUS_SUCCESS. |
|
#B0 #A1 WdfIoQueueRetrieveFoundRequest #A2 #C3 |
Aturan WdfIoQueueRetrieveFoundRequest menentukan bahwa metode WdfIoQueueRetrieveFoundRequest hanya dipanggil setelah WdfIoQueueFindRequest dipanggil dan dikembalikan STATUS_SUCCESS dan tidak ada WdfObjectDereference yang dipanggil pada permintaan yang sama. |
Aturan WdfIoQueueRetrieveNextRequest menentukan bahwa WdfIoQueueRetrieveNextRequest tidak dipanggil setelah WdfIoQueueFindRequest dipanggil. |
|
Aturan WriteReqs menentukan bahwa permintaan tulis tidak diteruskan ke metode KMDF yang tidak pantas. |
Untuk memilih seperangkat aturan RequestProcessing
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 RequestProcessing.
Untuk memilih seperangkat aturan default dari jendela prompt perintah pengembang Visual Studio, tentukan RequestProcessing.sdv dengan opsi /check . Contohnya:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver dan Perintah Pemverifikasi Driver Statis (MSBuild).