Déclarations de fonction KMDF du vérificateur de pilote statique

Pour permettre à SDV de vérifier votre pilote KMDF, vous devez déclarer chaque fonction de rappel, à l’aide d’un type de rôle de fonction de rappel. Les types de rôles de fonction de rappel sont définis dans les différents fichiers d’en-tête WDF et sont inclus lorsque vous générez votre pilote avec le fichier d’en-tête Wdf.h. Le tableau suivant montre les types de rôles de fonction et les fonctions de rappel d’événements auxquelles ils sont associés.

Vous devez déclarer les fonctions de rappel du pilote avant les définitions de la fonction de rappel. L’exemple suivant montre la déclaration de type de rôle de fonction pour la fonction de rappel EvtDriverDeviceAdd . Dans cet exemple, la fonction de rappel est appelée EvtDriverDeviceAdd.

#include <NTDDK.h>  
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd

Si une fonction de rappel a une déclaration de prototype de fonction, vous devez remplacer le prototype de fonction par la déclaration de type de rôle de fonction. Pour plus d’informations sur les déclarations de type de rôle de fonction, consultez Utilisation des déclarations de type de rôle de fonction.

Le tableau suivant montre les types de fonctions de rappel et les fonctions de rappel d’événements auxquelles ils sont associés.

Type de rôle de fonction Fonction de rappel d’événement

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP

EvtChildListAddressDescriptionCleanup

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY

EvtChildListAddressDescriptionCopy

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_CHILD_LIST_CREATE_DEVICE

EvtChildListCreateDevice

EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED

EvtChildListDeviceReenumerated

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP

EvtChildListIdentificationDescriptionCleanup

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE

EvtChildListIdentificationDescriptionCompare

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY

EvtChildListIdentificationDescriptionCopy

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN

EvtChildListScanForChildren

EVT_WDF_DEVICE_ARM_WAKE_FROM_S0

EvtDeviceArmWakeFromS0

EVT_WDF_DEVICE_ARM_WAKE_FROM_SX

EvtDeviceArmWakeFromSx

EVT_WDF_DEVICE_CONTEXT_CLEANUP

EvtCleanupCallback

EVT_WDF_DEVICE_CONTEXT_DESTROY

EvtDestroyCallback

EVT_WDF_DEVICE_D0_ENTRY

EvtDeviceD0Entry

EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED

EvtDeviceD0EntryPostInterruptsEnabled

EVT_WDF_DEVICE_D0_EXIT

EvtDeviceD0Exit

EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED

EvtDeviceD0ExitPreInterruptsDisabled

EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS

EvtDeviceDisableWakeAtBus

EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0

EvtDeviceDisarmWakeFromS0

EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX

EvtDeviceDisarmWakeFromSx

EVT_WDF_DEVICE_EJECT

EvtDeviceEject

EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS

EvtDeviceEnableWakeAtBus

EVT_WDF_DEVICE_FILE_CREATE

EvtDeviceFileCreate

EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS

EvtDeviceFilterAddResourceRequirements

EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION

EvtDevicePowerStateChange

EVT_WDF_DEVICE_PREPARE_HARDWARE

EvtDevicePrepareHardware

EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST

EvtDeviceProcessQueryInterfaceRequest

EVT_WDF_DEVICE_QUERY_REMOVE

EvtDeviceQueryRemove

EVT_WDF_DEVICE_QUERY_STOP

EvtDeviceQueryStop

EVT_WDF_DEVICE_RELATIONS_QUERY

EvtDeviceRelationsQuery

EVT_WDF_DEVICE_RELEASE_HARDWARE

EvtDeviceReleaseHardware

EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES

EvtDeviceRemoveAddedResources

EVT_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY

EvtDeviceResourceRequirementsQuery

EVT_WDF_DEVICE_RESOURCES_QUERY

EvtDeviceResourcesQuery

EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP

EvtDeviceSelfManagedIoCleanup

EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH

EvtDeviceSelfManagedIoFlush

EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT

EvtDeviceSelfManagedIoInit

EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART

EvtDeviceSelfManagedIoRestart

EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND

EvtDeviceSelfManagedIoSuspend

EVT_WDF_DEVICE_SET_LOCK

EvtDeviceSetLock

EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION

EvtDeviceShutdownNotification

EVT_WDF_DEVICE_SURPRISE_REMOVAL

EvtDeviceSurpriseRemoval

EVT_WDF_DEVICE_USAGE_NOTIFICATION

EvtDeviceUsageNotification

EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED

EvtDeviceWakeFromS0Triggered

EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED

EvtDeviceWakeFromSxTriggered

EVT_WDF_DMA_ENABLER_DISABLE

EvtDmaEnablerDisable

EVT_WDF_DMA_ENABLER_ENABLE

EvtDmaEnablerEnable

EVT_WDF_DMA_ENABLER_FILL

EvtDmaEnablerFill

EVT_WDF_DMA_ENABLER_FLUSH

EvtDmaEnablerFlush

EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_START

EvtDmaEnablerSelfManagedIoStart

EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP

EvtDmaEnablerSelfManagedIoStop

EVT_WDF_DPC

EvtDpcFunc

EVT_WDF_DRIVER_DEVICE_ADD

EvtDriverDeviceAdd

EVT_WDF_DRIVER_UNLOAD

EvtDriverUnload

EVT_WDF_FILE_CLEANUP

EvtFileCleanup

EVT_WDF_FILE_CLOSE

EvtFileClose

EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK

EvtCleanupCallback

EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK

EvtDestroyCallback

EVT_WDF_INTERRUPT_DISABLE

EvtInterruptDisable

EVT_WDF_INTERRUPT_DPC

EvtInterruptDpc

EVT_WDF_INTERRUPT_ENABLE

EvtInterruptEnable

EVT_WDF_INTERRUPT_ISR

EvtInterruptIsr

EVT_WDF_INTERRUPT_SYNCHRONIZE

EvtInterruptSynchronize

EVT_WDF_IO_IN_CALLER_CONTEXT

EvtIoInCallerContext

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

EvtCleanupCallback

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

EvtDestroyCallback

EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE

EvtIoCanceledOnQueue

EVT_WDF_IO_QUEUE_IO_DEFAULT

EvtIoDefault

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL

EvtIoDeviceControl

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL

EvtIoInternalDeviceControl

EVT_WDF_IO_QUEUE_IO_READ

EvtIoRead

EVT_WDF_IO_QUEUE_IO_RESUME

EvtIoResume

EVT_WDF_IO_QUEUE_IO_STOP

EvtIoStop

EVT_WDF_IO_QUEUE_IO_WRITE

EvtIoWrite

EVT_WDF_IO_QUEUE_STATE

EvtIoQueueState

EVT_WDF_IO_TARGET_QUERY_REMOVE

EvtIoTargetQueryRemove

EVT_WDF_IO_TARGET_REMOVE_CANCELED

EvtIoTargetRemoveCanceled

EVT_WDF_IO_TARGET_REMOVE_COMPLETE

EvtIoTargetRemoveComplete

EVT_WDF_OBJECT_CONTEXT_CLEANUP

EvtCleanupCallback

EVT_WDF_OBJECT_CONTEXT_DESTROY

EVT_WDF_PROGRAM_DMA

EvtProgramDma

EVT_WDF_REQUEST_CANCEL

EvtRequestCancel

EVT_WDF_REQUEST_COMPLETION_ROUTINE

CompletionRoutine

EVT_WDF_TIMER

EvtTimerFunc

EVT_WDF_TRACE_CALLBACK

EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD

EvtWmiInstanceExecuteMethod

EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE

EvtWmiInstanceQueryInstance

EVT_WDF_WMI_INSTANCE_SET_INSTANCE

EvtWmiInstanceSetInstance

EVT_WDF_WMI_INSTANCE_SET_ITEM

EvtWmiInstanceSetItem

EVT_WDF_WMI_PROVIDER_FUNCTION_CONTROL

EvtWmiProviderFunctionControl

EVT_WDF_WORKITEM

EvtWorkItem

EVT_WDFDEVICE_WDM_IRP_PREPROCESS

EvtDeviceWdmIrpPreprocess

Types de rôles de fonction qui autorisent plusieurs fonctions de rappel

Certains types de rôles de fonction peuvent avoir plusieurs fonctions de rappel d’événement associées. Par exemple, un pilote peut avoir plusieurs fonctions de rappel EvtTimerFunc ou EvtDpcFunc . Le tableau suivant indique le nombre maximal de rappels pris en charge par SDV pour chaque type de rôle de fonction. Bien qu’il ne soit pas incorrect pour un pilote d’avoir plus que le nombre maximal de fonctions de rappel répertoriées dans le tableau, cela complique le processus de vérification lors de l’utilisation de SDV. Pour plus d’informations sur les modifications que vous devrez peut-être apporter au fichier Sdv-map.h pour prendre en charge les fonctions de rappel supplémentaires, consultez Dupliquer les points d’entrée pour un type de rôle de fonction.

Type de rôle de fonction Nombre maximal de fonctions de rappel

EVT_WDF_DPC

7

EVT_WDF_INTERRUPT_SYNCHRONIZE

11

EVT_WDF_TIMER

6

EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD

5

EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE

5

EVT_WDF_WMI_INSTANCE_SET_INSTANCE

5

EVT_WDF_WMI_INSTANCE_SET_ITEM

5

Types de rôles de fonction et files d’attente d’E/S

Utilisez les types de rôles de fonction suivants lorsque vous déclarez les gestionnaires de demandes et les fonctions de rappel qui s’appuient sur l’infrastructure KMDF pour remettre les demandes d’E/S au pilote (pour la répartition séquentielle ou parallèle). N’utilisez pas ces types de rôles de fonction pour les fonctions qui transfèrent manuellement les demandes de la file d’attente par défaut vers d’autres files d’attente (répartition manuelle). SDV ne prend pas en charge un modèle de mémoire qui lui permet de suivre les demandes d’une file d’attente à une autre.

Pour plus d’informations sur les files d’attente d’E/S, consultez Création de files d’attente d’E/S.

Types de rôles de fonction utilisés pour la file d’attente d’E/S configurée pour la distribution manuelle

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE

EVT_WDF_IO_QUEUE_IO_DEFAULT

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL

EVT_WDF_IO_QUEUE_IO_READ

EVT_WDF_IO_QUEUE_IO_RESUME

EVT_WDF_IO_QUEUE_IO_STOP

EVT_WDF_IO_QUEUE_IO_WRITE

EVT_WDF_IO_QUEUE_STATE

Types de rôles de fonction pour les fonctions EvtCleanupCallback et EvtDestroyCallback

Vous devez déclarer les fonctions EvtCleanupCallback et EvtDestroyCallback avec des types de rôles de fonction spécifiques à l’objet. SDV nécessite ces types de rôles spécifiques à l’objet pour déterminer si le pilote utilise correctement la fonction de rappel. Utilisez les tableaux suivants pour déterminer le type de fonction à utiliser.

Type d’objet Type de rôle de fonction pour EvtCleanupCallback

Objet d’appareil

EVT_WDF_DEVICE_CONTEXT_CLEANUP

Objet file d’attente d’E/S

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

File (objet)

EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK

Tous les autres objets

EVT_WDF_OBJECT_CONTEXT_CLEANUP

Type d’objet Type de rôle de fonction pour EvDestroyCallback

Objet d’appareil

EVT_WDF_DEVICE_CONTEXT_DESTROY

Objet file d’attente d’E/S

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

File (objet)

EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK

Tous les autres objets

EVT_WDF_OBJECT_CONTEXT_DESTROY