Ensemble de règles d’avertissement (KMDF)
Utilisez ces règles pour vérifier que votre pilote peut traiter correctement les IRP dans différents contextes et suivre les meilleures pratiques recommandées par Microsoft.
Contenu de cette section
Rubrique | Description |
---|---|
La règle DeferredRequestCompleted spécifie que si une demande d’E/S présentée à la file d’attente d’E/S par défaut d’un pilote n’est pas terminée dans la fonction de rappel, mais est différée pour un traitement ultérieur, la demande doit être effectuée dans une fonction de rappel de traitement différé, sauf si la demande est transférée et remise à l’infrastructure, ou si la méthode WdfRequestStopAcknowledge est appelée. |
|
La règle DriverAttributeChanged spécifie qu’un pilote ne doit pas modifier le niveau d’exécution ou l’étendue de synchronisation d’un pilote KMDF. |
|
La règle DrvAckIoStop vérifie que le pilote est conscient des demandes en attente alors que sa file d’attente gérée par l’alimentation est hors tension et que le pilote accuse réception, termine ou annule les demandes en attente en conséquence. Dans le cas de demandes d’E/S autogérées, le pilote doit également gérer correctement ces demandes à partir de sa fonction EvtDeviceSelfManagedIoSuspend . Un pilote qui ne parvient pas à gérer ces requêtes pendant une mise hors tension entraîne la vérification des bogues 0x9F : DRIVER_POWER_STATE_FAILURE. |
|
La règle EvtIoResumeGetParam spécifie que WdfRequestGetParameters n’est pas appelé dans la fonction de rappel EvtIoResumeGetParam . |
|
La règle EvtIoStopGetParam vérifie que WdfRequestGetParameters n’est pas appelé dans le rappel EvtIoStop . |
|
La règle EvtIoStopResume spécifie que si un pilote inscrit une fonction de rappel EvtIoStop , puis appelle WdfRequestStopAcknowledge avec le paramètre Requeue égal à FALSE, le pilote doit inscrire une fonction de rappel EvtIoResume . L’infrastructure remet des requêtes à la fonction de rappel EvtIoResume lorsque l’appareil passe à nouveau à l’état D0. |
|
La règle EvtSurpriseRemoveNoRequestComplete spécifie que les pilotes WDF ne doivent pas terminer les demandes de rappel EvtDeviceSurpriseRemoval , mais que les fonctions de rappel d’E/S autogérées doivent être utilisées. Le rappel EvtDeviceSurpriseRemoval n’est pas synchronisé avec le chemin d’accès hors tension. |
|
La règle FDOPowerPolicyOwnerAPI spécifie que si un pilote FDO abandonne la propriété de la stratégie d’alimentation, les méthodes WdfDeviceInitSetPowerPolicyEventCallbacks, WdfDeviceAssignS0IdleSettings et WdfDeviceAssignSxWakeSettings ne peuvent être appelées que sur les chemins d’exécution où le pilote est propriétaire de la stratégie d’alimentation. SDV émet un avertissement pour cette règle. |
|
La règle NoCancelFromEvtSurpriseRemove spécifie que les pilotes WDF ne doivent pas annuler les demandes de la fonction de rappel EvtDeviceSurpriseRemoval , mais que les fonctions de rappel d’E/S autogérées doivent être utilisées. La fonction de rappel EvtDeviceSurpriseRemoval n’est pas synchronisée avec le chemin d’accès hors tension. |
|
La règle PagedCodeAtD0 spécifie qu’un pilote ne doit pas marquer le code comme paginable dans les fonctions de rappel qui se trouvent dans le chemin du code de mise sous tension. |
|
La règle ParentObjectCheck spécifie que le pilote doit appeler WdfMemoryCreate en spécifiant un objet parent à l’aide d’une structure WDF_OBJECT_ATTRIBUTES . Si le pilote ne définit pas d’objet parent pour l’objet de mémoire du framework, l’infrastructure définit le pilote comme parent par défaut, de sorte que, sauf si le pilote supprime explicitement l’objet de mémoire du framework, il reste en mémoire jusqu’à ce que l’objet pilote se décharge. |
|
La règle ReqNotCanceledLocal spécifie que si une demande marquée comme annulable est effectuée dans une fonction de rappel de file d’attente d’E/S par défaut, la méthode WdfRequestUnmarkCancelable doit être appelée sur la demande d’E/S avant l’achèvement. La demande d’E/S doit être effectuée, sauf si elle est annulée avant d’appeler WdfRequestUnmarkCancelable. |
|
La règle ReqSendFail spécifie qu’un pilote doit définir la status d’achèvement correcte dans les cas où la méthode WdfRequestSend peut échouer. |
|
La règle RequestCompletedLocal spécifie que si aucune requête d’E/S n’est effectuée dans l’une des fonctions de rappel EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl et EvtIoInternalDeviceControl , et si WdfRequestMarkCancelable n’a pas été appelé sur la requête dans la fonction de rappel, il peut y avoir un problème avec l’achèvement de la demande dans le code du pilote. |
|
Si le pilote client appelle WdfUsbTargetDeviceCreateWithParameters et spécifie la version du contrat client USBD_CLIENT_CONTRACT_VERSION_602 dans la structure WDF_USB_DEVICE_CREATE_CONFIG (pour utiliser les nouvelles fonctionnalités de la pile de pilotes USB pour Windows 8), les DDIs qui utilisent un URB en interne n’utilisent le contexte URB que si l’une des conditions préalables suivantes s’applique : |
|
La règle SyncReqSend spécifie que toutes les demandes d’envoi synchrone sont effectuées à l’aide de méthodes d’interface de pilote de périphérique KMDF spécifiques à la synchronisation, et que les méthodes ont une valeur de délai d’expiration différente de zéro. |
|
La règle SyncReqSend2 spécifie que les requêtes synchrones envoyées ont une valeur de délai d’attente différente de zéro. |
Pour sélectionner l’ensemble de règles d’avertissement
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 Avertissement.
Pour sélectionner l’ensemble de règles par défaut dans une fenêtre d’invite de commandes développeur Visual Studio, spécifiez Warning.sdv avec l’option /case activée. Par exemple :
msbuild /t:sdv /p:Inputs="/check:Warning.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).