Aturan MarkingQueuedIrps (wdm)
Aturan MarkingQueuedIrps menentukan bahwa driver memanggil IoMarkIrpPending untuk IRP yang hanya memerlukan pemrosesan lebih lanjut sambil menahan kunci putar. Aturan ini hanya berlaku ketika driver menambahkan IRP ke antrean yang dikelola driver.
Secara khusus, driver melanggar aturan ini hanya ketika semua peristiwa berikut terjadi.
Driver memanggil KeAcquireSpinLock atau KeAcquireInStackQueuedSpinLock untuk memperoleh kunci putar.
Driver memanggil salah satu rutinitas berikut untuk menambahkan IRP ke antrean yang dikelola driver:
Driver memanggil KeReleaseSpinLock atau KeReleaseInStackQueuedSpinLock untuk melepaskan kunci spin sebelum memanggil IoMarkIrpPending.
Driver mengembalikan status STATUS_PENDING untuk IRP.
Driver harus memanggil IoMarkIrpPending untuk IRP yang diantrekan hanya saat memegang kunci putaran. Jika tidak, IRP dapat dihapus dari antrean, diselesaikan oleh rutinitas driver lain, dan dibebaskan oleh sistem sebelum panggilan ke IoMarkIrpPending terjadi, sehingga menyebabkan crash.
Untuk informasi selengkapnya, lihat Menyinkronkan Pembatalan IRP.
Model driver: WDM
Cara menguji
Pada waktu kompilasi |
---|
Jalankan Pemverifikasi Driver Statis dan tentukan aturan MarkingQueuedIrps . Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver. |
Berlaku untuk
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList