Partager via


Jeu de règles IrpTracking (WDM)

Utilisez ces règles pour vérifier que votre pilote effectue correctement le suivi des paquets de demande d’E/S (IRP) afin que l’appareil ne soit pas supprimé pendant que les fournisseurs d’intégration sont en attente.

Contenu de cette section

Sujet Description

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

La règle IoReleaseRemoveLockAndWaitOutsideRemoveDevice spécifie que IoReleaseRemoveLockAndWait ne doit pas être appelé en dehors de IRP_MJ_PNP avec IRP_MN_REMOVE_DEVICE pour un pilote PnP.

NsRemoveLockMnRemoveRemove

La règle NsRemoveLockMnRemove vérifie qu’un pilote ne retourne pas STATUS_NOT_SUPPORTED lors du traitement de IRP_MJ_PNP avec minorFunction IRP_MN_REMOVE_DEVICE. Cette règle s’applique uniquement aux pilotes FDO et FIDO.

NsRemoveLockMnSurpriseRemoveRemove

La règle NsRemoveLockMnSurpriseRemoveRemove vérifie qu’un pilote ne retourne pas STATUS_NOT_SUPPORTED lors du traitement d’une requête IRP_MJ_PNP avec minorFunction IRP_MN_SUPRISE_REMOVAL. Cette règle s’applique uniquement aux pilotes FDO et FIDO.

NsRemoveLockQueryMnRemove

La règle NsRemoveLockQueryMnRemove vérifie qu’un pilote ne retourne pas STATUS_NOT_SUPPORTED lors du traitement de IRP_MJ_PNP avec minorFunction IRP_MN_QUERY_REMOVE. Cette règle s’applique uniquement aux pilotes FDO et FIDO.

RemoveLock

La règle RemoveLock spécifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement. De plus, à la fin de la routine IRP_MJ_PNP ou IRP_MJ_POWER, le pilote ne doit pas contenir le RemoveLock.

RemoveLockCheck

La règle RemoveLockCheck vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLockAndWait sont utilisés correctement lors du traitement de IRP_MJ_PNP avec minorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockForward

La règle RemoveLockForward vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert d’un IRP vers un autre appareil.

RemoveLockForward2

La règle RemoveLockForward2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert de l’IRP vers un autre appareil.

RemoveLockForwardDeviceControl

La règle RemoveLockForwardDeviceControl vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lorsque le pilote utilise IoCallDriver pour transférer un IRP vers un autre appareil.

RemoveLockForwardDeviceControl2

La règle RemoveLockForwardDeviceControl2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lorsque le pilote utilise IoCallDriver pour transférer un IRP vers un autre appareil.

RemoveLockForwardDeviceControlInternal

La règle RemoveLockForwardDeviceControlInternal vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert d’un IRP à l’aide d’IoCallDriver vers un autre appareil.

RemoveLockForwardDeviceControlInternal2

La règle RemoveLockForwardDeviceControlInternal2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert d’un IRP à l’aide d’IoCallDriver vers un autre appareil.

RemoveLockForwardRead

La règle RemoveLockForwardRead vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement.

RemoveLockForwardRead2

La règle RemoveLockForwardRead2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert d’un IRP à l’aide d’IoCallDriver vers un autre appareil.

RemoveLockForwardWrite

La règle RemoveLockForwardWrite vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert d’un IRP à l’aide d’IoCallDriver vers un autre appareil.

RemoveLockForwardWrite2

La règle RemoveLockForwardWrite2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du transfert d’un IRP à l’aide d’IoCallDriver vers un autre appareil.

RemoveLockMnRemove

La règle RemoveLockMnRemove vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLockAndWait sont utilisés correctement lors du traitement des IRP_MJ_PNP avec MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockMnRemove2

La règle RemoveLockMnRemove2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLockAndWait sont utilisés correctement lors du traitement de IRP_MN_REMOVE_DEVICE demande avant que l’IRP soit transféré aux pilotes inférieurs.

RemoveLockMnSurpriseRemove

La règle RemoveLockMnSurpriseRemove vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLockAndWait sont utilisés correctement lors du traitement des IRP_MJ_PNP avec MinorFunction IRP_MN_SUPRISE_REMOVAL. Le pilote doit acquérir le verrou de suppression avant de transférer l’IRP vers le bas de la pile.

RemoveLockQueryMnRemove

La règle RemoveLockQueryMnRemove vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés correctement lors du traitement de IRP_MJ_PNP avec MinorFunction IRP_MN_QUERY_REMOVE_DEVICE. Le pilote doit acquérir le verrou de suppression avant de transférer l’IRP vers le bas de la pile.

RemoveLockRelease2

La règle RemoveLockRelease2 vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseCleanup

La règle RemoveLockReleaseCleanup spécifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. Chaque appel à IoAcquireRemoveLock doit avoir un appel correspondant à IoReleaseRemoveLock. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseClose

La règle RemoveLockReleaseClose vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseCreate

La règle RemoveLockReleaseCreate vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseDeviceControl

La règle RemoveLockReleaseDeviceControl vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseInternalDeviceControl

La règle RemoveLockReleaseInternalDeviceControl vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleasePnp

La règle RemoveLockReleasePnp vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleasePower

La règle RemoveLockReleasePower vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseRead

La règle RemoveLockReleaseRead vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseShutdown

La règle RemoveLockReleaseShutdown vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseSystemControl

La règle RemoveLockReleaseSystemControl vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

RemoveLockReleaseWrite

La règle RemoveLockReleaseWrite vérifie que les appels à IoAcquireRemoveLock et IoReleaseRemoveLock sont utilisés dans une alternation stricte. De plus, à la fin de la routine de répartition, le pilote ne doit pas contenir le verrou de suppression.

Pour sélectionner l’ensemble de règles IrpTracking

  1. Sélectionnez votre projet de pilote (.vcxProj) dans Microsoft Visual Studio. Dans le menu Pilote , cliquez sur Lancer le vérificateur de pilote statique....

  2. Cliquez sur l’onglet Règles . Sous Ensembles de règles, sélectionnez IrpTracking.

    Pour sélectionner l’ensemble de règles par défaut dans une fenêtre d’invite de commandes du développeur Visual Studio, spécifiez IrpTracking.sdv avec l’option /case activée. Par exemple :

    msbuild /t:sdv /p:Inputs="/check:IrpTracking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Pour plus d’informations, consultez Utilisation du vérificateur de pilote statique pour rechercher des défauts dans les pilotes et les commandes MSBuild (Static Driver Verifier).