Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La fonctionnalité Vérification SCSI de Driver Verifier surveille l’interaction entre un pilote miniport SCSI et le pilote de port. Si le pilote miniport utilise mal une routine, répond incorrectement à une demande du pilote de port ou prend un temps excessif pour répondre à une demande, un bogue case activée est émis.
Cette option Driver Verifier est disponible uniquement dans Windows XP et versions ultérieures.
Violations détectées par la vérification SCSI
L’option Vérification SCSI peut détecter plusieurs mauvaises utilisations des routines SCSI. Il est également possible de désactiver individuellement certaines de ces vérifications.
Lorsqu’un pilote miniport SCSI valide l’une des violations suivantes, Driver Verifier émet des case activée 0xF1 de bogues.
Le pilote miniport transmet un argument incorrect à ScsiPortInitialize.
Le pilote miniport appelle ScsiPortStallExecution et spécifie un délai supérieur à 0,1 seconde, ce qui bloque le processeur pendant une durée excessive.
Le pilote de port appelle une routine de pilote miniport, et le pilote miniport prend plus de 0,5 seconde pour l’exécuter. (La routine FindAdapter est exemptée et la routine HwInitialize est autorisée 5 secondes.)
Le pilote miniport effectue une requête plusieurs fois.
Le pilote miniport effectue une routine avec un status SRB non valide.
Le pilote miniport appelle ScsiPortNotification pour demander NextLuRequest, mais une requête non marquée est toujours active.
Le pilote miniport transmet une adresse virtuelle non valide à ScsiPortGetPhysicalAddress. (Cela signifie généralement que l’adresse fournie ne correspond pas à la zone tampon commune.)
La période d’attente de réinitialisation du bus se termine, mais le pilote miniport a toujours des demandes en attente.
Pour obtenir la liste complète des paramètres de case activée, consultez Vérification des bogues 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION).
En plus de ces violations, la vérification SCSI surveille également l’accès à la mémoire du pilote miniport pour toute utilisation incorrecte. Deux violations de mémoire courantes effectuées par les pilotes miniport sont l’accès à une extension SRB après la fin d’une requête et l’accès au DataBuffer d’un SRB lorsque le pilote miniport n’a pas spécifié MapBuffers.
Les violations de mémoire de ce type entraînent généralement l’émission de 0xD1 de vérification des bogues (DRIVER_IRQL_NOT_LESS_OR_EQUAL).
Activation de cette option
La procédure d’activation de l’option vérification SCSI est différente des procédures d’activation d’autres options du vérificateur de pilotes.
Pour activer la vérification SCSI
À l’aide du Gestionnaire du vérificateur de pilotes ou de la ligne de commande Verifier.exe, démarrez une vérification du pilote miniport. Étant donné que la vérification SCSI n’est pas disponible en tant qu’option, vous devez sélectionner au moins une autre option du vérificateur de pilotes. Pour plus d’informations, consultez Sélection des options du vérificateur de pilotes et Sélection des pilotes à vérifier .
Ouvrez le Registre à l’aide de regedit.exe. Dans la cléHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort , ajoutez une sous-clé nommée Verifier. Dans cette clé, ajoutez une entrée REG_DWORD nommée VerifyLevel. La valeur affectée à cette entrée détermine quels tests de vérification SCSI seront actifs. La valeur 0x1 donnera une vérification maximale.
Redémarrez l'ordinateur.
Si la valeur VerifyLevel n’existe pas ou est égale à 0xFFFFFFFF, la vérification SCSI est désactivée.
Les bits individuels de la valeur VerifyLevel peuvent être utilisés pour contrôler exactement les tests qui seront effectués. Le bit zéro (0x1) permet certains tests ; Les bits 28, 29, 30 et 31 désactivent certains tests. Par conséquent, la vérification maximale peut être obtenue à l’aide de la valeur 0x00000001.
Les effets de chaque bit sont les suivants :
bit | Valeur | Effet |
---|---|---|
0 |
0x1 |
Le vérificateur de pilotes surveille l’accès à la mémoire du pilote miniport et case activée en cas d’utilisation incorrecte des mémoires tampons. |
28 |
0x10000000 |
Driver Verifier n’émettra pas de bogue case activée lorsque la routine HwAdapterControl prend plus de 0,5 seconde. |
29 |
0x20000000 |
Driver Verifier n’émettra pas de bogue case activée lorsqu’une période d’attente de réinitialisation se termine et qu’il y a toujours des demandes en attente sur une unité logique. |
30 |
0x40000000 |
Driver Verifier n’émettra pas de bogue case activée lorsque le pilote miniport appelle ScsiPortNotification avec NextLuRequest alors qu’une requête non marquée est toujours active. |
31 |
0x80000000 |
Driver Verifier n’émettra pas de bogue case activée lorsque la routine HwInitialize prend plus de 5 secondes. |
Dans la plupart des cas, le paramètre recommandé est 0xD0000001. Cela active tous les tests du vérificateur SCSI , à l’exception de la limite de temps sur HwAdapterControl, de la limite de temps sur HwInitialize et de l’interdiction de plusieurs requêtes adressées à une unité logique. Ces trois tests sont souvent trop rigoureux.
Si un débogueur de noyau est attaché, il est possible de modifier le niveau de vérification SCSI après le cycle de démarrage. Pour ce faire, utilisez la commande débogueur :
kd> ed scsiport!SpVrfyLevel Level
Cette commande vous permet de définir une nouvelle valeur pour Level. À l’aide de cette méthode, vous pouvez modifier les bits élevés (0x10000000 via 0x8000000) à tout moment. Toutefois, si vous souhaitez modifier le bit faible (0x1), vous devez le faire pendant le processus de démarrage (au point d’arrêt initial du débogueur du noyau).
De même, si vous souhaitez désactiver complètement la vérification SCSI, vous devez définir Level sur 0xFFFFFFFF au point d’arrêt initial.
Note La valeur 0xF0000000 désactive tous les tests, mais les modules de vérification SCSI sont toujours chargés. Utilisez cette valeur si vous souhaitez désactiver la vérification, mais que vous avez l’intention d’activer les tests de bits élevés ultérieurement. D’autre part, la valeur 0xFFFFFFFF empêche le chargement complet des modules ; si cette valeur est utilisée pendant le démarrage, il ne sera pas possible d’activer la vérification SCSI sans redémarrage.
Activation sans redémarrage
En général, vous ne pouvez pas activer ou désactiver la vérification SCSI sans redémarrer (« redémarrage ») de l’ordinateur sur un système d’exploitation Windows. Le pilote ScsiPort.sys lit l’entrée de Registre VerifyLevel uniquement lorsqu’elle se charge, ce qui est généralement au moment du démarrage. Toutefois, si le pilote ScsiPort.sys n’est pas chargé lorsque vous ajoutez l’entrée du Registre, ou s’il est déchargé et rechargé, vous pouvez activer la vérification SCSI sur Windows XP et les versions ultérieures de Windows sans redémarrer l’ordinateur.