Ensemble de règles IrpProcessing (WDM)
Utilisez ces règles pour vérifier que votre pilote traite correctement les paquets de demandes d’E/S (IRP).
Contenu de cette section
Rubrique | Description |
---|---|
La règle CompleteRequest vérifie que la routine IoCompleteRequest n’est pas appelée après l’exécution d’une routine d’achèvement et qu’elle ne retourne pas STATUS_MORE_PROCESSING_REQUIRED. |
|
La règle CompleteRequestStatusCheck vérifie que la valeur de status d’E/S dans l’IRP correspond à la valeur status retournée par le pilote inférieur. |
|
La règle CompletionRoutineRegistered spécifie que si la routine de dispatch inscrit une routine IoCompletion à l’aide de IoSetCompletionRoutineEx, la routine de répartition doit ensuite appeler IoCallDriver ou PoCallDriver. |
|
La règle DoubleCompletion (WDM) spécifie que le pilote ne doit pas appeler la routine IoCompleteRequest deux fois pour le même IRP. |
|
La règle IoReuseIrp spécifie qu’un pilote doit utiliser IoReuseIrp uniquement sur les IRP qu’il a précédemment alloués avec IoAllocateIrp. |
|
La règle IoReuseIrp2 spécifie qu’un pilote doit utiliser IoReuseIrp uniquement sur les IRP qu’il a précédemment alloués dans le pilote. |
|
La règle IoSetCompletionExCompleteIrp spécifie que la routine IoSetCompletionRoutineEx retourne une valeur NTSTATUS. Le pilote doit case activée cette valeur pour déterminer si la routine IoCompletion a été correctement enregistrée avant d’appeler IoCallDriver ou PoCallDriver et si IoSetCompletionRoutineEx échoue, l’IRP doit être effectué et la routine de distribution doit être retournée. |
|
La règle IoSetCompletionRoutineExCheck spécifie que la routine IoSetCompletionRoutineEx retourne une valeur NTSTATUS. Le pilote doit case activée cette valeur pour déterminer si la routine IoCompletion a été correctement inscrite avant d’appeler IoCallDriver ou PoCallDriver. |
|
La règle IoSetCompletionRoutineExCheckDeviceObject spécifie que si l’objet d’appareil actuel n’est pas passé à IoSetCompletionRoutineEx et que l’objet d’appareil inférieur l’est, cela peut entraîner une condition de concurrence dans laquelle l’objet d’appareil actuel peut être déchargé même si la routine d’achèvement n’a pas été exécutée. |
|
La règle IoSetCompletionRoutineNonPnpDriver spécifie que les pilotes qui ne sont pas des pilotes PnP doivent utiliser IoSetCompletionRoutineEx et non IoSetCompletionRoutine. |
|
La règle IrpCancelField spécifie que le pilote case activée la valeur du membre Irp-Cancel> lors de la définition d’une routine d’annulation sur un IRP qu’il a suspendu. |
|
La règle IrpProcessingComplete spécifie que si une routine de répartition retourne STATUS_SUCCESS, l’IRP doit avoir été effectuée par le pilote lui-même ou par un pilote de niveau inférieur. |
|
La règle LowerDriverReturn spécifie qu’après avoir utilisé PoCallDriver ou IoCallDriver pour appeler un pilote inférieur, le pilote enregistre le retour status de l’appel et transmet le retour status qu’il a reçu à la routine de distribution. |
|
La règle SignalEventInCompletion spécifie que lors du traitement d’une IRP asynchrone, le pilote doit appeler keSetEvent dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini. |
|
La règle SignalEventInCompletion2 spécifie que lors du traitement d’une IRP asynchrone, le pilote doit appeler keSetEvent dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini. |
|
La règle SignalEventInCompletion3 spécifie que lors du traitement d’un IRP asynchrone, le pilote doit appeler keSetEvent dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini. |
|
La règle StartIoCancel spécifie que le pilote ne doit pas appeler IoSetStartIoAttributes avec le paramètre NonCancelable défini sur FALSE avant d’appeler IoSetCancelRoutine avec une routine d’annulation non NULL. |
|
La règle StartIoRecursion spécifie que si la routine StartIo d’un pilote inclut un appel à IoStartNextPacket, le pilote doit d’abord appeler IoSetStartIoAttributes avec l’attribut DeferredStartIo défini sur TRUE. Sinon, une récursivité infinie peut en résulter. |
|
La règle PnpRemove spécifie que le pilote ne peut pas effectuer IRP_MN_SURPRISE_REMOVAL, IRP_MN_CANCEL_REMOVE_DEVICE, IRP_MN_CANCEL_STOP_DEVICE ou IRP_MN_REMOVE_DEVICE demandes ayant échoué. |
|
La règle PnpSurpriseRemove spécifie que le pilote n’appelle pas IoDeleteDevice ou IoDetachDevice lors du traitement d’une demande de IRP_MN_SURPRISE_REMOVAL . |
|
La règle PowerDownAllocate spécifie qu’un pilote FDO et FIDO ne doivent pas allouer de mémoire lors du traitement d’une demande de IRP_MN_SET_POWER pour une transition SystemPowerState qui passe de s0 à [S1... S5]. |
|
La règle PowerDownFail spécifie qu’un pilote FDO ou FIDO ne doit pas faire échouer une demande de IRP_MN_SET_POWER lorsque l’appareil est hors tension. Cette règle s’applique uniquement aux pilotes FDO et FIDO. |
|
La règle PowerIrpDDIs spécifie que lorsqu’un pilote traite un système ou un appareil IRP_MJ_POWER avec IRP_MN_SET_POWER, il ne doit pas appeler des DDIs qui ne peuvent être appelées qu’à PASSIVE_LEVEL. |
|
La règle PowerUpFail spécifie qu’un pilote FDO ou FIDO ne doit pas échouer une demande de IRP_MN_SET_POWER lorsque l’appareil est mis sous tension. |
|
La règle PnpIrpCompletion vérifie qu’un pilote FDO transmet des IRP PnP au pilote inférieur. |
|
La règle WmiComplete spécifie que lors du traitement d’une IRP mineure WMI, le pilote appelle IoCompleteRequest avant de revenir de la routine DispatchSystemControl . |
|
La règle WmiForward spécifie que le pilote doit transférer les irps secondaires WMI lorsque le transfert est nécessaire. |
Pour sélectionner l’ensemble de règles IrpProcessing
Sélectionnez votre projet de pilote (.vcxProj) dans Microsoft Visual Studio. Dans le menu Pilote , cliquez sur Lancer le vérificateur de pilote statique....
Cliquez sur l’onglet Règles . Sous Ensembles de règles, sélectionnez IrpProcessing.
Pour sélectionner l’ensemble de règles par défaut à partir d’une fenêtre d’invite de commandes développeur Visual Studio, spécifiez IrpProcessing.sdv avec l’option /case activée. Par exemple :
msbuild /t:sdv /p:Inputs="/check:IrpProcessing.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 commandes MSBuild (Static Driver Verifier).