Bagikan melalui


Seperangkat aturan IrpTracking (WDM)

Gunakan aturan ini untuk memverifikasi bahwa driver Anda melacak paket permintaan I/O (IRP) dengan benar sehingga perangkat tidak dihapus saat RUN keluar.

Di bagian ini

Topik Deskripsi

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

Aturan IoReleaseRemoveLockAndWaitOutsideRemoveDevice menentukan bahwa IoReleaseRemoveLockAndWait tidak boleh dipanggil di luar IRP_MJ_PNP dengan IRP_MN_REMOVE_DEVICE untuk driver PnP.

NsRemoveLockMnRemove

Aturan NsRemoveLockMnRemove memverifikasi driver tidak mengembalikan STATUS_NOT_SUPPORTED saat memproses IRP_MJ_PNP dengan minorFunction IRP_MN_REMOVE_DEVICE. Aturan ini hanya berlaku untuk driver FDO dan FIDO.

NsRemoveLockMnSurpriseRemove

Aturan NsRemoveLockMnSurpriseRemove memverifikasi bahwa driver tidak mengembalikan STATUS_NOT_SUPPORTED saat memproses permintaan IRP_MJ_PNP dengan IRP_MN_SUPRISE_REMOVAL minorFunction. Aturan ini hanya berlaku untuk driver FDO dan FIDO.

NsRemoveLockQueryMnRemove

Aturan NsRemoveLockQueryMnRemove memverifikasi driver tidak mengembalikan STATUS_NOT_SUPPORTED saat memproses IRP_MJ_PNP dengan MinorFunction IRP_MN_QUERY_REMOVE. Aturan ini hanya berlaku untuk driver FDO dan FIDO.

Hapus Blokir

Aturan RemoveLock menentukan bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar. Selain itu, di akhir rutinitas IRP_MJ_PNP atau IRP_MJ_POWER, driver tidak boleh menahan RemoveLock.

RemoveLockCheck

Aturan RemoveLockCheck memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLockAndWait digunakan dengan benar saat memproses IRP_MJ_PNP dengan MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockForward

Aturan RemoveLockForward memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP ke perangkat lain.

RemoveLockForward2

Aturan RemoveLockForward2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP ke perangkat lain.

RemoveLockForwardDeviceControl

Aturan RemoveLockForwardDeviceControl memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar ketika driver menggunakan IoCallDriver untuk meneruskan IRP ke perangkat lain.

RemoveLockForwardDeviceControl2

Aturan RemoveLockForwardDeviceControl2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar ketika driver menggunakan IoCallDriver untuk meneruskan IRP ke perangkat lain.

RemoveLockForwardDeviceControlInternal

Aturan RemoveLockForwardDeviceControlInternal memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP menggunakan IoCallDriver ke perangkat lain.

RemoveLockForwardDeviceControlInternal2

Aturan RemoveLockForwardDeviceControlInternal2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP menggunakan IoCallDriver ke perangkat lain.

RemoveLockForwardRead

Aturan RemoveLockForwardRead memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar.

RemoveLockForwardRead2

Aturan RemoveLockForwardRead2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP menggunakan IoCallDriver ke perangkat lain.

RemoveLockForwardWrite

Aturan RemoveLockForwardWrite memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP menggunakan IoCallDriver ke perangkat lain.

RemoveLockForwardWrite2

Aturan RemoveLockForwardWrite2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat meneruskan IRP menggunakan IoCallDriver ke perangkat lain.

RemoveLockMnRemove

Aturan RemoveLockMnRemove memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLockAndWait digunakan dengan benar saat memproses IRP_MJ_PNP dengan MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockMnRemove2

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.

RemoveLockMnSurpriseRemove

Aturan RemoveLockMnSurpriseRemove memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLockAndWait digunakan dengan benar saat memproses IRP_MJ_PNP dengan MinorFunction IRP_MN_SUPRISE_REMOVAL. Driver harus memperoleh kunci hapus sebelum meneruskan IRP ke bawah tumpukan.

RemoveLockQueryMnRemove

Aturan RemoveLockQueryMnRemove memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dengan benar saat memproses IRP_MJ_PNP dengan MinorFunction IRP_MN_QUERY_REMOVE_DEVICE. Driver harus memperoleh kunci hapus sebelum meneruskan IRP ke bawah tumpukan.

RemoveLockRelease2

Aturan RemoveLockRelease2 memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseCleanup

Aturan RemoveLockReleaseCleanup menentukan bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Setiap panggilan ke IoAcquireRemoveLock harus memiliki panggilan yang cocok ke IoReleaseRemoveLock. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseClose

Aturan RemoveLockReleaseClose memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseCreate

Aturan RemoveLockReleaseCreate memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseDeviceControl

Aturan RemoveLockReleaseDeviceControl memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseInternalDeviceControl

Aturan RemoveLockReleaseInternalDeviceControl memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleasePnp

Aturan RemoveLockReleasePnp memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleasePower

Aturan RemoveLockReleasePower memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseRead

Aturan RemoveLockReleaseRead memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseShutdown

Aturan RemoveLockReleaseShutdown memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseSystemControl

Aturan RemoveLockReleaseSystemControl memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

RemoveLockReleaseWrite

Aturan RemoveLockReleaseWrite memverifikasi bahwa panggilan ke IoAcquireRemoveLock dan IoReleaseRemoveLock digunakan dalam perubahan ketat. Selain itu, di akhir rutinitas pengiriman driver tidak boleh menahan kunci hapus.

Untuk memilih seperangkat aturan IrpTracking

  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 IrpTracking.

    Untuk memilih seperangkat aturan default dari jendela prompt perintah pengembang Visual Studio, tentukan IrpTracking.sdv dengan opsi /check . Contohnya:

    msbuild /t:sdv /p:Inputs="/check:IrpTracking.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).