WDM IRPs und WDF-Ereignisrückruffunktionen

Kernel-Mode Driver Framework (KMDF) und User-Mode Driver Framework (UMDF) unterstützen eine Teilmenge von Windows IRPs. In der folgenden Tabelle sind die wichtigsten WDM-IRP-Typen und die entsprechenden Frameworkereignisrückruffunktionen aufgeführt. Sofern nicht anders angegeben, gelten die Rückrufe sowohl für KMDF als auch für UMDF.

Haupt-IRP-Code WDF-Ereignisrückruffunktion
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreate oder EvtIoDefault
IRP_MJ_CREATE_MAILSLOT Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_DEVICE_CHANGE Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl oder EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_FLUSH_BUFFERS Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl oder EvtIoDefault
IRP_MJ_LOCK_CONTROL Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_PNP Viele; Weitere Informationen finden Sie unter KMDF-Rückrufe für IRP_MJ_PNP.
IRP_MJ_POWER Viele; Siehe KMDF-Rückrufe für IRP_MJ_POWER.
IRP_MJ_QUERY_EA Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_INFORMATION Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_QUOTA Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_SECURITY Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_VOLUME_INFORMATION Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_READ EvtIoRead oder EvtIoDefault
IRP_MJ_SET_EA Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SET_INFORMATION Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SET_QUOTA Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SET_SECURITY Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SET_VOLUME_INFORMATION Kein direkter Support; Implementieren von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SHUTDOWN

Implementieren Sie EvtDeviceShutdownNotification (nur KMDF) für Steuergeräteobjekte.

Für alle Plug & Play Geräteobjekte: Nicht unterstützt; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF).

IRP_MJ_SYSTEM_CONTROL Erstellen Sie WDFWMIPROVIDER- und WDFWMIINSTANCE-Objekte, und implementieren Sie Rückrufe von EvtWmiXxx (nur KMDF).
IRP_MJ_WRITE EvtIoWrite oder EvtIoDefault

KMDF-Rückrufe für IRP_MJ_PNP

In der folgenden Tabelle sind in der Reihenfolge der Ausführung die KMDF-Rückrufe aufgeführt, die den nebensäch chen IRP-Codes für IRP_MJ_PNP entsprechen. Die Pfeile geben an, ob ein WDM-FDO den IRP verarbeitet, während er den Stapel nach oben oder unten bewegt.

Hinweis In einem KMDF-Treiber sind Plug & Play- und Energieverwaltung integrierte Vorgänge, und der Treiber empfängt nicht die einzelnen geringfügigen IRP_MJ_PNP oder IRP_MJ_POWER Anforderungen. Stattdessen ruft das Framework eine Kernmenge von Rückrufen beim Einschalten und einen entsprechenden Satz beim Herunterschalten auf und ruft zusätzliche Rückrufe vor und nach diesem Kernsatz auf, je nach Bedarf für jede einzelne Plug & Play Anforderung. Umfassende Diagramme, die die Power-Up- und Power-Down-Sequenzen zeigen, finden Sie unter Portieren von PnP und Power Management-Funktionen.

IRP_MJ_PNP Nebencode KMDF-Rückrufe
IRP_MN_CANCEL_REMOVE_DEVICE Keine
IRP_MN_CANCEL_STOP_DEVICE Keine
IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
/IRP_MN_EJECT EvtDeviceEject (nur KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirerements (nur KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirerements (nur KMDF)
IRP_MN_QUERY_BUS_INFORMATION Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.
IRP_MN_QUERY_CAPABILITIES Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.
-IRP_MN_QUERY_DEVICE_RELATIONS (Bus-, Entfernungs- und Auswurfbeziehungen) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.
IRP_MN_QUERY_ID Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (nur KMDF)
IRP_MN_QUERY_PNP_DEVICE_STATE Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.
-IRP_MN_QUERY_REMOVE_DEVICE EvtDeviceQueryRemove
-IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery (nur KMDF)
-IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (nur KMDF)
-IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.
-IRP_MN_REMOVE_DEVICE

Nach IRP_MN_QUERY_REMOVE_DEVICE:

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend-Flag ) EvtDmaEnablerSelfManagedIoStop (nur KMDF)EvtDmaEnablerDisable (nur KMDF)EvtDmaEnablerFlush (nur KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop ( WdfRequestStopActionPurge-Flag ) für power-verwaltete Warteschlangen EvtDeviceSelfManagedIoFlushEvtIoStop (WdfRequestStopActionPurge-Flag ) für nicht von Der Energie verwaltete Warteschlangen EvtDeviceSelfManagedIoCleanupEvtCleanupCallback für WDFDEVICE EvtDestroyCallback für WDFDEVICE

Nach IRP_MN_SURPRISE_REMOVAL:

EvtIoStop (WdfRequestStopActionPurge-Flag ) für Nicht-Power-verwaltete Warteschlangen EvtDeviceSelfManagedIoCleanupEvtCleanupCallback für WDFDEVICE EvtDestroyCallback für WDFDEVICE
-IRP_MN_SET_LOCK EvtDeviceSetLock (nur KMDF)
IRP_MN_START_DEVICE

Nach der Enumeration:

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

Nach IRP_MN_STOP_DEVICE:

EvtDeviceRemoveAddedResources (nur KMDF)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (nur KMDF)EvtDmaEnablerEnable (nur KMDF)EvtDmaEnablerSelfManagedIoStart (nur KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
-IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend-Flag ) EvtDmaEnablerSelfManagedIoStop (nur KMDF)EvtDmaEnablerDisable (nur KMDF)EvtDmaEnablerDisable (nur KMDF)EvtDmaEnablerFlush (nur KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardware
-IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend Flag) EvtDmaEnablerSelfManagedIoStop (nur KMDF)EvtDmaEnablerDisable (KMDF) nur)EvtDmaEnablerFlush (nur KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop (WdfRequestStopActionPurge-Flag ) für power-managed queues EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Keine. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, sodass das Framework selbst auf diese Abfrage reagieren kann, ohne den Treiber zu benachrichtigen.

KMDF-Rückrufe für IRP_MJ_POWER

In der folgenden Tabelle sind in der Reihenfolge der Ausführung die KMDF-Rückrufe aufgeführt, die den untergeordneten IRP-Codes für IRP_MJ_POWER entsprechen. Die Pfeile geben an, ob eine WDM-FDO die IRP beim Verschieben nach oben oder unten im Stapel verarbeitet.

Hinweis Hinweis: In einem KMDF-Treiber sind Plug & Play und Energieverwaltung integrierte Vorgänge, und der Treiber empfängt nicht die einzelnen geringfügigen IRP_MJ_PNP oder IRP_MJ_POWER Anforderungen. Stattdessen ruft das Framework einen Kernsatz von Rückrufen beim Einschalten und einen entsprechenden Satz beim Herunterschalten auf und ruft zusätzliche Rückrufe vor und nach diesem Kernsatz auf, je nach Bedarf für jede einzelne Plug & Play Anforderung. Umfassende Diagramme, die die Power-Up- und Power-Down-Sequenzen zeigen, finden Sie unter Portieren von PnP und Power Management-Funktionen.

IRP_MJ_POWER Nebencode Framework-Rückrufe
-IRP_MN_SET_POWER für D1, D2 oder D3 (herunterschalten) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend-Flag ) EvtDeviceArmWakeFromS0 oder EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (nur KMDF)EvtDmaEnablerDisable (nur KMDF)EvtDmaEnablerFlush (nur KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
IRP_MN_SET_POWER für D0 (Einschalten) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (nur KMDF)EvtDmaEnablerEnable (nur KMDF)EvtDmaEnablerSelfManagedIoStart (nur KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
-IRP_MN_SET_POWER für Sx Keine
IRP_MN_SET_POWER für Sx Keine
IRP_MN_POWER_SEQUENCE Keine
-IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (nur KMDF)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (nur KMDF)