Aturan RemoveLockMnRemove2 (wdm)
Aturan RemoveLockMnRemove2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLockAndWait digunakan dengan benar saat memproses permintaan IRP_MN_REMOVE_DEVICE sebelum IRP diteruskan ke driver yang lebih rendah.
Aturan ini hanya berlaku untuk driver FDO dan FIDO.
Misalnya, pertimbangkan tumpukan driver PnP yang terdiri dari driver filter, FDO, dan PDO.
Manajer PnP mengirim penghapusan kueri melalui tumpukan. FDO diaktifkan untuk menganggur saat sistem sedang berjalan. FDO memutuskan untuk mematikan dalam status kueri yang dihapus, sehingga meminta d0 IRP. Sebelum IRP d0 tiba, manajer PnP mengirimkan IRP penghapusan PnP dan bahwa IRP diproses oleh driver filter. Driver filter terlepas dari tumpukan dan membersihkan statusnya. D0 tiba di bagian atas tumpukan, tetapi driver filter tidak mengirimkannya ke bawah tumpukan karena tidak memiliki konteks atau data untuk mengetahui ke mana harus mengirimnya lagi. FDO digantung menunggu d0 IRP tiba tetapi IRP itu tidak akan pernah.
Untuk menghindari kesalahan ini
Sebelum perangkat terlepas dari tumpukan perangkat, IoAcquireRemoveLock harus berhasil sebelum IRP diteruskan ke tumpukan untuk jenis IRP berikut:
- IRP_MN_QUERY_REMOVE
- IRP_MN_SUPRISE_REMOVAL
- IRP_MN_REMOVE_DEVICE
IoReleaseRemoveLockAndWait harus dipanggil sebelum memanggil IoDetachDevice atau IoDeleteDevice. (Ini memastikan bahwa semua kunci penghapusan dilepaskan di driver perangkat).
Model driver: WDM
Cara menguji
Pada waktu kompilasi |
---|
Jalankan Pemverifikasi Driver Statis dan tentukan aturan RemoveLockMnRemove2 . Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver. |
Berlaku untuk
IoAcquireRemoveLockIoCallDriverIoReleaseRemoveLockIoReleaseRemoveLockAndWaitPoCallDriver