Partager via


Fonctions de rappel d’événements WDM et IRP

Kernel-Mode Driver Framework (KMDF) et User-Mode Driver Framework (UMDF) prennent en charge un sous-ensemble de runtimes d’intégration Windows. Le tableau suivant répertorie les principaux types d’IRP WDM et les fonctions de rappel d’événements d’infrastructure correspondantes. Sauf indication contraire, les rappels s’appliquent à KMDF et à UMDF.

Code IRP principal Fonction de rappel d’événement WDF
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreate ou EvtIoDefault
IRP_MJ_CREATE_MAILSLOT Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_DEVICE_CHANGE Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl ou EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_FILE_SYSTEM_CONTROL Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_FLUSH_BUFFERS Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl ou EvtIoDefault
IRP_MJ_LOCK_CONTROL Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_PNP Nombreux; consultez Rappels KMDF pour IRP_MJ_PNP.
IRP_MJ_POWER Nombreux; consultez Rappels KMDF pour IRP_MJ_POWER.
IRP_MJ_QUERY_EA Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_QUERY_INFORMATION Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_QUERY_QUOTA Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_QUERY_SECURITY Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_QUERY_VOLUME_INFORMATION Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_READ EvtIoRead ou EvtIoDefault
IRP_MJ_SET_EA Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_SET_INFORMATION Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_SET_QUOTA Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_SET_SECURITY Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_SET_VOLUME_INFORMATION Aucune prise en charge directe ; implémenter EvtDeviceWdmIrpPreprocess (KMDF uniquement)
IRP_MJ_SHUTDOWN

Pour les objets d’appareil de contrôle, implémentez EvtDeviceShutdownNotification (KMDF uniquement)

Pour tous les objets d’appareil Plug-and-Play : non pris en charge ; implémentez EvtDeviceWdmIrpPreprocess (KMDF uniquement).

IRP_MJ_SYSTEM_CONTROL Créez des objets WDFWMIPROVIDER et WDFWMIINSTANCE et implémentez des rappels EvtWmiXxx (KMDF uniquement).
IRP_MJ_WRITE EvtIoWrite ou EvtIoDefault

Rappels KMDF pour IRP_MJ_PNP

Le tableau suivant répertorie, par ordre d’exécution, les rappels KMDF qui correspondent aux codes IRP mineurs pour IRP_MJ_PNP. Les flèches indiquent si un FDO WDM gère l’IRP quand il se déplace vers le haut ou le bas de la pile.

Note Dans un pilote KMDF, Plug-and-Play et la gestion de l’alimentation sont des opérations intégrées et le pilote ne reçoit pas les demandes de IRP_MJ_PNP ou de IRP_MJ_POWER. Au lieu de cela, l’infrastructure appelle un ensemble de rappels de base à la mise sous tension et un ensemble correspondant à l’arrêt, et appelle des rappels supplémentaires avant et après ce cœur défini comme approprié pour chaque demande de Plug-and-Play individuelle. Pour obtenir des diagrammes complets montrant les séquences de mise sous tension et de mise hors tension, consultez Portage de PnP et fonctionnalités de gestion de l’alimentation.

IRP_MJ_PNP code mineur Rappels KMDF
IRP_MN_CANCEL_REMOVE_DEVICE None
IRP_MN_CANCEL_STOP_DEVICE None
IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
IRP_MN_EJECT EvtDeviceEject (KMDF uniquement)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirequirements (KMDF uniquement)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (KMDF uniquement)
IRP_MN_QUERY_BUS_INFORMATION Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.
IRP_MN_QUERY_CAPABILITIES Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.
IRP_MN_QUERY_DEVICE_RELATIONS (relations de bus, de suppression et d’éjection) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.
IRP_MN_QUERY_ID Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (KMDF uniquement)
IRP_MN_QUERY_PNP_DEVICE_STATE Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.
IRP_MN_QUERY_REMOVE_DEVICE EvtDeviceQueryRemove
IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery (KMDF uniquement)
IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (KMDF uniquement)
IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.
IRP_MN_REMOVE_DEVICE

Après IRP_MN_QUERY_REMOVE_DEVICE :

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (KMDF uniquement)EvtDmaEnablerDisable (KMDF uniquement)EvtDmaEnablerFlush (KMDF uniquement)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop ( WdfRequestStopActionPurge indicateur) pour les files d’attente gérées par l’alimentation EvtDeviceSelfManagedIoFlushEvtIoStop (indicateur WdfRequestStopActionPurge) pour les files d’attente non gérées par l’alimentation EvtDeviceSelfManagedIoCleanupCallback pour WDFDEVICE EvtDestroyCallback pour WDFDEVICE

Après IRP_MN_SURPRISE_REMOVAL :

EvtIoStop (indicateur WdfRequestStopActionPurge ) pour les files d’attente non gérées par l’alimentation EvtDeviceSelfManagedIoCleanupEvtCleanupCallback pour WDFDEVICE EvtDestroyCallback pour WDFDEVICE
IRP_MN_SET_LOCK EvtDeviceSetLock (KMDF uniquement)
IRP_MN_START_DEVICE

Après l’énumération :

EvtDeviceRemoveAddedResources (KMDF uniquement)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF uniquement)EvtDmaEnablerEnable (KMDF uniquement)EvtDmaEnablerSelfManagedIoStart (KMDF uniquement)EvtDeviceSelfManagedIoInit

Après IRP_MN_STOP_DEVICE :

EvtDeviceRemoveAddedResources (KMDF uniquement)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF uniquement)EvtDmaEnablerEnable (KMDF uniquement)EvtDmaEnablerSelfManagedIoStart (KMDF uniquement)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (KMDF uniquement)EvtDmaEnablerDisable (KMDF uniquement)EvtDmaEnablerFlush (KMDF uniquement)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (KMDF uniquement)EvtDmaEnablerDisable (KMDF uniquement))EvtDmaEnablerFlush (KMDF uniquement)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Étatfinal ) EvtDeviceReleaseHardwareEvtIoStop (Indicateur WdfRequestStopActionPurge ) pour les files d’attente gérées par l’alimentation EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Aucun. Le pilote KMDF appelle les méthodes WdfDeviceInitXxx pour définir les propriétés de l’appareil pendant l’initialisation afin que l’infrastructure puisse répondre à cette requête seule sans en informer le pilote.

Rappels KMDF pour IRP_MJ_POWER

Le tableau suivant répertorie, par ordre d’exécution, les rappels KMDF qui correspondent aux codes IRP mineurs pour IRP_MJ_POWER. Les flèches indiquent si un FDO WDM gère l’IRP quand il se déplace vers le haut ou le bas de la pile.

Note Remarque : Dans un pilote KMDF, Plug-and-Play et la gestion de l’alimentation sont des opérations intégrées et le pilote ne reçoit pas les demandes de IRP_MJ_PNP mineures ou IRP_MJ_POWER individuelles. Au lieu de cela, l’infrastructure appelle un ensemble de rappels de base à la mise sous tension et un ensemble correspondant à l’arrêt, et appelle des rappels supplémentaires avant et après ce cœur défini comme approprié pour chaque demande de Plug-and-Play individuelle. Pour obtenir des diagrammes complets montrant les séquences de mise sous tension et de mise hors tension, consultez Portage de PnP et fonctionnalités de gestion de l’alimentation.

IRP_MJ_POWER code mineur Rappels d’infrastructure
IRP_MN_SET_POWER pour D1, D2 ou D3 (mise hors tension) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDeviceArmWakeFromS0 ou EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (KMDF uniquement)EvtDmaEnablerDisable (KMDF uniquement)EvtDmaEnablerFlush (KMDF uniquement)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
IRP_MN_SET_POWER pour D0 (mise sous tension) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF uniquement)EvtDmaEnablerEnable (KMDF uniquement)EvtDmaEnablerSelfManagedIoStart (KMDF uniquement)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_SET_POWER pour Sx None
IRP_MN_SET_POWER pour Sx None
IRP_MN_POWER_SEQUENCE None
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (KMDF uniquement)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (KMDF uniquement)