Partager via


Ensemble de règles LocalIrpProcessing (WDM)

Utilisez ces règles pour vérifier que votre pilote gère correctement les paquets de demandes d’E/S (IRP) créés par le pilote.

Contenu de cette section

Rubrique Description

IoAllocateComplete

La règle IoAllocateComplete spécifie qu’un pilote ne doit pas appeler IoCompleteRequest si l’IRP a été créé avec IoAllocateIrp.

IoAllocateFree

La règle IoAllocateFree spécifie qu’un pilote doit utiliser IoFreeIrp uniquement sur les irPs précédemment alloués avec IoAllocateIrp.

IoAllocateForward

La règle IoAllocateForward spécifie que si un IRP est généré par un appel à IoAllocateIrp, le pilote doit définir une routine d’achèvement avant d’appeler IoCallDriver ou PoCallDriver.

IoAllocateIrpSignalEventInCompletion

La règle IoAllocateIrpSignalEventInCompletion spécifie que le pilote doit appeler KeSetEvent dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini et que la routine d’achèvement traite une IRP asynchrone créée localement.

IoAllocateIrpSignalEventInCompletion2

La règle IoAllocateIrpSignalEventInCompletion2 spécifie que KeSetEvent doit être appelé dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini et que la routine d’achèvement traite un IRP asynchrone créé localement.

IoAllocateIrpSignalEventInCompletion3

La règle IoAllocateIrpSignalEventInCompletion3 spécifie que KeSetEvent doit être appelé dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini et que la routine d’achèvement traite un IRP asynchrone créé localement.

IoAllocateIrpSignalEventInCompletionTimeout

La règle IoAllocateIrpSignalEventInCompletionTimeout signale un défaut si elle détecte que ce pilote attendra indéfiniment le retour du pilote inférieur, car l’événement de l’IRP doit être signalé dans la routine d’achèvement.

IoBuildDeviceControlNoFree

La règle IoBuildDeviceControlNoFree spécifie qu’un pilote qui appelle IoBuildDeviceIoControlRequest ne doit pas appeler IoFreeIrp.

IoBuildDeviceControlWait

La règle IoBuildDeviceControlWait spécifie que la routine KeWaitForSingleObject doit être appelée si IoCallDriver ou PoCallDriver retourne STATUS_PENDING.

IoBuildDeviceControlWaitTimeout

La règle IoBuildDeviceControlWaitTimeout signale un défaut si elle détecte que ce pilote attendra indéfiniment le retour du pilote inférieur, car l’événement de l’IRP doit être signalé dans la routine d’achèvement.

IoBuildDeviceIoControlSetEvent

La règle IoBuildDeviceIoControlSetEvent spécifie qu’un pilote qui appelle IoBuildDeviceIoControlRequest ne doit pas appeler KeSetEvent si le pilote fournit un pointeur vers un objet d’événement alloué et initialisé par l’appelant. Le KeSetEvent n’a pas besoin d’être appelé par le pilote pour cette IRP.

IoBuildFsdComplete

La règle IoBuildFsdComplete spécifie qu’un pilote ne doit pas appeler IoCompleteRequest si l’IRP a été créé avec IoBuildAsynchronousFsdRequest.

IoBuildFsdForward

La règle IoBuildFsdForward spécifie qu’une routine d’achèvement doit être définie avant qu’un pilote appelle IoCallDriver ou PoCallDriver si l’IRP est généré par un appel à IoBuildAsynchronousFsdRequest.

IoBuildFsdFree

La règle IoBuildFsdFree spécifie qu’un pilote doit utiliser IoFreeIrp uniquement sur les IRP qu’il a précédemment alloués avec IoBuildAsynchronousFsdRequest.

IoBuildFsdIrpSignalEventInCompletion

La règle IoBuildFsdIrpSignalEventInCompletion spécifie que le pilote doit appeler KeSetEvent dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini et que la routine d’achèvement traite une IRP asynchrone créée localement.

IoBuildFsdIrpSignalEventInCompletion2

La règle IoBuildFsdIrpSignalEventInCompletion2 spécifie que KeSetEvent doit être appelé dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini et que la routine d’achèvement traite un IRP asynchrone créé localement.

IoBuildFsdIrpSignalEventInCompletion3

La règle IoBuildFsdIrpSignalEventInCompletion3 spécifie que KeSetEvent doit être appelé dans la routine d’achèvement lorsque l’indicateur Irp-PendingReturned> est défini et que la routine d’achèvement traite un IRP asynchrone créé localement.

IoBuildFsdIrpSignalEventInCompletionTimeout

La règle IoBuildFsdIrpSignalEventInCompletionTimeout signale un défaut lorsque le pilote attend indéfiniment le retour du pilote inférieur, car l’événement de l’IRP doit être signalé dans la routine d’achèvement.

IoBuildSynchronousFsdRequestNoFree

La règle IoBuildSynchronousFsdRequestNoFree spécifie qu’un pilote qui appelle IoBuildSynchronousFsdRequest ne doit pas appeler IoFreeIrp.

IoBuildSynchronousFsdRequestWait

La règle IoBuildSynchronousFsdRequestWait spécifie que KeWaitForSingleObject doit être appelé dans le cas où IoCallDriver ou PoCallDriver retourne STATUS_PENDING.

IoBuildSynchronousFsdRequestWaitTimeout

La règle IoBuildSynchronousFsdRequestWaitTimeout signale un défaut si elle détecte que ce pilote attendra indéfiniment le retour du pilote inférieur, car l’événement IRP doit être signalé dans la routine d’achèvement.

RequestedPowerIrp

La règle RequestedPowerIrp spécifie que le pilote appelle PoRequestPowerIrp avec la variable de *Irp pointeur définie sur NULL.

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

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

    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 LocalIrpProcessing.sdv avec l’option /case activée. Par exemple :

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