Remarque
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.
Utilisez ces règles pour vérifier que votre pilote utilise les DDIs KMDF correctement.
Dans cette section
| Sujet | Descriptif |
|---|---|
La règle BufAfterReqCompletedIoctl spécifie que dans la fonction de rappel EvtIoDeviceControl , la mémoire tampon de requête d’E/S récupérée est inaccessible une fois la requête d’E/S terminée. |
|
La règle BufAfterReqCompletedIntIoctl spécifie qu’une fois qu’une demande est terminée, sa mémoire tampon ne peut pas être accessible (à l’intérieur de la fonction de rappel EvtIoInternalDeviceControl uniquement). La mémoire tampon est récupérée en appelant WdfRequestRetrieveOutputBuffer ou WdfRequestRetrieveUnsafeUserOutputBuffer ou WdfRequestRetrieveInputBuffer ou WdfRequestRetrieveUnsafeUserInputBuffer. |
|
La règle BufAfterReqCompletedIntIoctlA vérifie qu’une fois qu’une demande est terminée, sa mémoire tampon ne peut pas être accessible (à l’intérieur de EvtIoInternalDeviceControl callback uniquement). La mémoire tampon a été récupérée en appelant WdfRequestRetrieveInputBuffer ou WdfRequestRetrieveOutputBuffer ou WdfRequestRetrieveUnsafeUserInputBuffer ou WdfRequestRetrieveUnsafeUserOutputBuffer. |
|
La règle BufAfterReqCompletedIoctlA spécifie que dans la fonction de rappel EvtIoDeviceControl , la mémoire tampon de requête d’E/S récupérée est inaccessible une fois la requête d’E/S terminée. |
|
La règle BufAfterReqCompletedRead spécifie que dans la fonction de rappel EvtIoRead , la mémoire tampon de requête d’E/S récupérée est inaccessible une fois la requête d’E/S terminée. Il existe 14 DDIS qui servent de méthodes d’accès aux mémoires tampons possibles. |
|
La règle BufAfterReqCompletedReadA spécifie que dans la fonction de rappel EvtIoRead , la mémoire tampon de requête d’E/S récupérée est inaccessible une fois la requête d’E/S terminée. Il existe 14 DDIS qui servent de méthodes d’accès aux mémoires tampons possibles. |
|
La règle BufAfterReqCompletedWrite spécifie que dans la fonction de rappel EvtIoWrite , la mémoire tampon de requête d’E/S récupérée est inaccessible une fois la requête d’E/S terminée. |
|
La règle BufAfterReqCompletedWriteA spécifie que dans la fonction de rappel EvtIoWrite , la mémoire tampon de requête d’E/S récupérée est inaccessible une fois la requête d’E/S terminée. |
|
La règle ChildDeviceInitApi spécifie que pour un appareil enfant, les méthodes d’initialisation d’objet d’appareil framework doivent être appelées avant que le pilote appelle la méthode WdfDeviceCreate pour l’objet d’appareil enfant. |
|
La règle ControDeviceDeleted spécifie que si un pilote PnP crée un objet de périphérique de contrôle, le pilote doit supprimer l'objet de périphérique de contrôle dans l'une des fonctions de rappel de nettoyage avant le déchargement du pilote. |
|
La règle ControlDeviceInitAPI spécifie que WdfControlDeviceInitAllocate et toutes les autres DDIS d’initialisation d’objet d’appareil qui configurent une structure WDFDEVICE_INIT pour l’appareil de contrôle doivent être appelées avant WdfDeviceCreate pour l’appareil de contrôle. |
|
La règle CtlDeviceFinishInitDeviceAdd spécifie que si un pilote crée un objet de périphérique de contrôle dans une fonction de rappel EvtDriverDeviceAdd , il doit appeler WdfControlFinishInitializing une fois l’appareil créé et avant de quitter la fonction de rappel EvtDriverDeviceAdd . Cette règle ne s’applique pas aux pilotes non PnP. |
|
La règle CtlDeviceFinishInitDrEntry spécifie que si un pilote crée un objet de périphérique de contrôle dans une fonction de rappel DriverEntry , il doit appeler WdfControlFinishInitializing une fois l’appareil créé et avant de quitter la fonction de rappel EvtDriverDeviceAdd . Cette règle ne s’applique pas aux pilotes non PnP. |
|
La règle DeviceCreateFail spécifie que EVT_WDF_DRIVER_DEVICE_ADD retourne un état d’erreur lorsque l’appel à WdfDeviceCreate échoue. |
|
La règle DeviceInitAllocate spécifie que, pour un appareil PDO ou un objet d’appareil de contrôle, les méthodes d’initialisation d’objet d’appareil framework WdfPdoInitAllocate ou WdfControlDeviceInitAllocate doivent être appelées avant que le pilote appelle WdfDeviceCreate. |
|
Pour un appareil FDO, les méthodes d’initialisation de l'objet de périphérique de framework et les méthodes d’initialisation FDO de framework doivent être appelées avant que le pilote appelle la méthode WdfDeviceCreate pour l'objet de périphérique. |
|
La règle DoubleDeviceInitFree spécifie que les pilotes ne doivent pas libérer la structure d’initialisation des appareils deux fois. |
|
La règle DriverCreate spécifie qu’un pilote qui utilise KMDF (Kernel Mode Driver Framework) doit appeler la méthode WdfDriverCreate pour créer un objet de pilote d’infrastructure à partir de sa routine DriverEntry . |
|
La règle InitFreeDeviceCallback spécifie qu’un pilote doit appeler WdfDeviceInitFree si le pilote rencontre une erreur pendant qu’il initialise un nouvel objet de périphérique d’infrastructure et si le pilote a reçu la structure WDFDEVICE_INIT d’un appel à WdfControlDeviceInitAllocate. |
|
La règle InitFreeDeviceCreate spécifie qu’un pilote doit appeler WdfDeviceInitFree au lieu de WdfDeviceCreate si une erreur se produit dans l’une des méthodes d’initialisation de l’objet d’appareil et si le pilote a reçu la structure WDFDEVICE_INIT d’un appel à WdfControlDeviceInitAllocate. |
|
La règle InitFreeDeviceCreateType2 spécifie qu’un pilote ne doit pas appeler WdfDeviceCreate après avoir appelé WdfDeviceInitFree. |
|
La règle InitFreeDeviceCreateType4 spécifie qu’un pilote doit appeler WdfDeviceInitFree si le pilote rencontre une erreur pendant qu’il appelle WdfDeviceCreate et si le pilote a reçu la structure WDFDEVICE_INIT d’un appel à WdfControlDeviceInitAllocate. |
|
La règle InitFreeNull spécifie que les DDIs recevant PWDFDEVICE_INIT en tant que paramètre ne peuvent pas être appelés à l’aide d’un pointeur NULL vers une structure WDFDEVICE_INIT . |
|
La règle MdlAfterReqCompletedIntIoctl spécifie que dans la fonction de rappel EvtIoInternalDeviceControl , la liste de descripteurs de mémoire (MDL) n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedIntIoctlA spécifie que dans la fonction de rappel EvtIoInternalDeviceControl , la liste de descripteurs de mémoire (MDL) n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedIoctl spécifie que dans la fonction de rappel EvtIoDeviceControl , la liste de descripteur de mémoire (MDL) ne peut pas être accessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedIoctlA spécifie que dans la fonction de rappel EvtIoDeviceControl , la liste de descripteurs de mémoire (MDL) n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedRead spécifie que dans la fonction de rappel EvtIoRead , l’objet de descripteur de mémoire récupéré (MDL) est inaccessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedReadA spécifie que dans la fonction de rappel EvtIoRead , l’objet de descripteur mémoire récupéré est inaccessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedWrite spécifie que dans la fonction de rappel EvtIoWrite , l’objet descripteur de mémoire récupéré est inaccessible une fois la requête d’E/S terminée. |
|
La règle MdlAfterReqCompletedWriteA spécifie que dans la fonction de rappel EvtIoWrite , l’objet de la liste de descripteurs de mémoire (MDL) récupéré est inaccessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedIntIoctl spécifie que dans la fonction de rappel EvtIoInternalDeviceControl , l’objet mémoire de l’infrastructure n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedIntIoctlA spécifie que dans la fonction de rappel EvtIoInternalDeviceControl , l’objet mémoire du framework n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedIoctl spécifie que dans la fonction de rappel EvtIoDeviceControl , l’objet mémoire du framework n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedIoctlA spécifie que dans la fonction de rappel EvtIoDeviceControl , l’objet mémoire du framework n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedRead spécifie que dans la fonction de rappel EvtIoRead , l’objet mémoire de l’infrastructure n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedReadA spécifie que dans la fonction de rappel EvtIoRead , l’objet mémoire de l’infrastructure n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedWrite spécifie que dans la fonction de rappel EvtIoWrite , l’objet mémoire de l’infrastructure n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle MemAfterReqCompletedWriteA spécifie que dans la fonction de rappel EvtIoWrite , l’objet mémoire du framework n’est pas accessible une fois la requête d’E/S terminée. |
|
La règle NullCheck vérifie qu'une valeur NULL à l'intérieur du code du pilote n'est pas déréférencée ultérieurement dans le pilote. Cette règle signale un défaut si l’une de ces conditions est vraie :
Avec les violations de règle NullCheck, les instructions de code les plus pertinentes sont mises en surbrillance dans le volet d’arborescence de trace. Pour plus d'informations sur l'utilisation de la sortie du rapport, consultez Rapport du Vérificateur de Pilotes Statique et Comprendre la Visionneuse de Trace. |
|
La règle PdoDeviceInitAPI spécifie que WdfPdoInitAllocate et toutes les autres DDIS d’initialisation d’objet d’appareil qui configurent une structure WDFDEVICE_INIT pour l’objet d’appareil physique (PDO) doivent être appelés avant que le pilote appelle WdfDeviceCreate pour l’objet PDO. |
|
La règle PdoInitFreeDeviceCallback spécifie que le pilote doit appeler WdfDeviceInitFree si une erreur se produit lorsque le pilote appelle une fonction d’initialisation d’objet d’appareil framework. |
|
La règle PdoInitFreeDeviceCreate spécifie qu’un pilote doit appeler WdfDeviceInitFree au lieu de WdfDeviceCreate si une erreur se produit dans l’une des fonctions d’initialisation de l’objet d’appareil et si le pilote a reçu la structure WDFDEVICE_INIT d’un appel à WdfPdoInitAllocate. |
|
La règle PdoInitFreeDeviceCreateType2 spécifie qu’un pilote ne doit pas appeler WdfDeviceCreate après avoir appelé WdfDeviceInitFree. |
|
La règle PdoInitFreeDeviceCreateType4 spécifie que le pilote doit appeler WdfDeviceInitFree si une erreur se produit lorsque le pilote appelle WdfDeviceCreate. |
|
La règle ControlDeviceInitAllocate spécifie que pour un objet de périphérique de contrôle, le pilote doit appeler la méthode d’initialisation de l’objet d’appareil framework WdfControlDeviceInitAllocate avant que le pilote appelle WdfDeviceCreate. |
|
La règle InputBufferAPI spécifie que les DDIs corrects pour la récupération de mémoire tampon sont utilisés dans la fonction de rappel EvtIoRead. Dans la fonction de rappel EvtIoRead , les DDIs suivants ne peuvent pas être appelés pour la récupération de mémoire tampon : |
Pour sélectionner l’ensemble de règles d’utilisation DDI
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 DDIUsage.
Pour sélectionner l’ensemble de règles par défaut à partir d’une fenêtre d’invite de commandes du développeur Visual Studio, spécifiez DDIUsage.sdv avec l’option /check . Par exemple:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Pour plus d’informations, veuillez consulter la section Utilisation de Static Driver Verifier pour rechercher des défauts dans les pilotes et les commandes MSBuild (Static Driver Verifier).