Ensemble de règles d’utilisation DDI (KMDF)
Utilisez ces règles pour vérifier que votre pilote utilise correctement les DDIS KMDF.
Contenu de cette section
Rubrique | Description |
---|---|
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 ne peut pas être accessible une fois la demande d’E/S terminée. |
|
La règle BufAfterReqCompletedIntIoctl spécifie qu’une fois qu’une demande est terminée, sa mémoire tampon n’est pas accessible (dans 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 la demande terminée, sa mémoire tampon est inaccessible (dans le rappel EvtIoInternalDeviceControl 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 qu’au sein de la fonction de rappel EvtIoDeviceControl , la mémoire tampon de requête d’E/S récupérée n’est pas accessible une fois la demande 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 ne peut pas être accessible une fois la demande d’E/S terminée. Il existe 14 DDIs qui servent de méthodes d’accès à la mémoire tampon possibles. |
|
La règle BufAfterReqCompletedReadA spécifie qu’au sein de la fonction de rappel EvtIoRead , la mémoire tampon de requête d’E/S récupérée n’est pas accessible une fois la demande d’E/S terminée. Il existe 14 DDIs qui servent de méthodes d’accès à la mémoire tampon 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 ne peut pas être accessible une fois la demande 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 demande d’E/S terminée. |
|
La règle ChildDeviceInitApi spécifie que pour un appareil enfant, les méthodes d’initialisation de l’objet de périphérique d’infrastructure doivent être appelées avant que le pilote appelle la méthode WdfDeviceCreate pour l’objet de périphérique 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 tous les autres DDIS d’initialisation d’objet d’appareil qui configurent une structure WDFDEVICE_INIT pour le périphérique de contrôle doivent être appelés avant WdfDeviceCreate pour le périphérique 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 qu’il ne se quitte de 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 qu’il ne quitte 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 une erreur status lorsque l’appel à WdfDeviceCreate échoue. |
|
La règle DeviceInitAllocate spécifie que, pour un appareil PDO ou un objet de périphérique de contrôle, les méthodes d’initialisation de l’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 d’objet de périphérique d’infrastructure et les méthodes d’initialisation FDO de l’infrastructure 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 deux fois la structure d’initialisation de périphérique. |
|
La règle DriverCreate spécifie qu’un pilote qui utilise l’infrastructure du pilote en mode noyau (KMDF) doit appeler la méthode WdfDriverCreate pour créer un objet 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 lors de l’initialisation d’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 de périphérique 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 des 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 qu’au sein de la fonction de rappel EvtIoInternalDeviceControl , la liste de descripteurs mémoire (MDL) n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedIntIoctlA spécifie que dans la fonction de rappel EvtIoInternalDeviceControl , la liste de descripteurs mémoire (MDL) est inaccessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedIoctl spécifie que dans la fonction de rappel EvtIoDeviceControl , la liste de descripteurs mémoire (MDL) n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedIoctlA spécifie que dans la fonction de rappel EvtIoDeviceControl , la liste de descripteurs mémoire (MDL) est inaccessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedRead spécifie qu’au sein de la fonction de rappel EvtIoRead , l’objet de liste de descripteurs mémoire (MDL) récupéré n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedReadA spécifie que dans la fonction de rappel EvtIoRead , l’objet de liste de descripteurs mémoire (MDL) récupéré est inaccessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedWrite spécifie que dans la fonction de rappel EvtIoWrite , l’objet de liste de descripteurs mémoire (MDL) récupéré ne peut pas être accessible une fois la demande d’E/S terminée. |
|
La règle MdlAfterReqCompletedWriteA spécifie que dans la fonction de rappel EvtIoWrite , l’objet de liste de descripteurs mémoire (MDL) récupéré ne peut pas être accessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedIntIoctl spécifie que, dans la fonction de rappel EvtIoInternalDeviceControl , l’objet mémoire du framework est inaccessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedIntIoctlA spécifie que dans la fonction de rappel EvtIoInternalDeviceControl , l’objet de mémoire du framework n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedIoctl spécifie que dans la fonction de rappel EvtIoDeviceControl , l’objet de mémoire du framework est inaccessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedIoctlA spécifie qu’au sein de la fonction de rappel EvtIoDeviceControl , l’objet mémoire du framework n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedRead spécifie que dans la fonction de rappel EvtIoRead , l’objet mémoire du framework n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedReadA spécifie que dans la fonction de rappel EvtIoRead , l’objet de mémoire du framework n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedWrite spécifie que dans la fonction de rappel EvtIoWrite , l’objet de mémoire du framework n’est pas accessible une fois la demande d’E/S terminée. |
|
La règle MemAfterReqCompletedWriteA spécifie qu’au sein de la fonction de rappel EvtIoWrite , l’objet mémoire du framework n’est pas accessible une fois la demande 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 remplie :
Avec les violations de règle NullCheck, les instructions de code les plus pertinentes sont mises en surbrillance dans le volet de l’arborescence de trace. Pour plus d’informations sur l’utilisation de la sortie de rapport, consultez Rapport du vérificateur de pilote statique et Présentation de la visionneuse de trace. |
|
La règle PdoDeviceInitAPI spécifie que WdfPdoInitAllocate et tous les autres DDIs d’initialisation d’objet d’appareil qui configurent une structure de WDFDEVICE_INIT pour l’objet de périphérique physique (PDO) doivent être appelés avant que le pilote appelle WdfDeviceCreate pour l’AOP. |
|
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 de périphérique d’infrastructure. |
|
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 d’objet de périphérique 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 de périphérique d’infrastructure 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 développeur Visual Studio, spécifiez DDIUsage.sdv avec l’option /case activée. Par exemple :
msbuild /t:sdv /p:Inputs="/check:DDIUsage.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).