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 Framework-Ereignisrü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 Es gibt keine direkte Unterstützung; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_DEVICE_CHANGE Es gibt keine direkte Unterstützung; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl oder EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Keine direkte Unterstützung; implement EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL Keine direkte Unterstützung; implement EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_FLUSH_BUFFERS Keine direkte Unterstützung; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl oder EvtIoDefault
IRP_MJ_LOCK_CONTROL Keine direkte Unterstützung vorhanden; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_PNP Viele; siehe 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 Keine direkte Unterstützung; Implementierung von EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_INFORMATION Keine direkte Unterstützung; EvtDeviceWdmIrpPreprocess (nur KMDF) implementieren.
IRP_MJ_QUERY_QUOTA Keine direkte Unterstützung; implementieren EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_SECURITY Es wird nicht direkt unterstützt; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_QUERY_VOLUME_INFORMATION Es gibt keine direkte Unterstützung; implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_READ EvtIoRead oder EvtIoDefault
IRP_MJ_SET_EA Keine direkte Unterstützung verfügbar. Implementieren Sie EvtDeviceWdmIrpPreprocess (nur KMDF).
IRP_MJ_SET_INFORMATION Keine direkte Unterstützung; implement EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SET_QUOTA Keine direkte Unterstützung; implement EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SET_SECURITY Keine direkte Unterstützung; EvtDeviceWdmIrpPreprocess (nur KMDF) implementieren
IRP_MJ_SET_VOLUME_INFORMATION Keine direkte Unterstützung; implement EvtDeviceWdmIrpPreprocess (nur KMDF)
IRP_MJ_SHUTDOWN

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

Für alle Plug- und Play-Geräteobjekte: Nicht unterstützt; evtDeviceWdmIrpPreprocess (nur KMDF) implementieren.

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

KMDF-Rückrufe für IRP_MJ_PNP

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

Anmerkung In einem KMDF-Treiber sind Plug- und Play- und Energieverwaltung integrierte Vorgänge, und der Treiber erhält nicht die einzelnen kleineren IRP_MJ_PNP oder IRP_MJ_POWER Anforderungen. Stattdessen ruft das Framework einen Kernsatz von Rückrufen beim Einschalten und einen entsprechenden Satz beim Ausschalten auf und ruft zusätzliche Rückrufe vor und nach diesem Kernsatz entsprechend für jede einzelne Plug-and-Play-Anforderung auf. Umfassende Diagramme, die die Power-Up- und Power-Down-Sequenzen zeigen, finden Sie unter Portieren von PnP- und Power Management-Funktionen.

IRP_MJ_PNP Untercode KMDF-Rückrufe
IRP_MN_CANCEL_REMOVE_DEVICE Nichts
IRP_MN_CANCEL_STOP_DEVICE Nichts
^IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
IRP_MN_EJECT EvtDeviceEject (nur KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements (nur KMDF)
^IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (nur KMDF)
IRP_MN_QUERY_BUS_INFORMATION Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig reagieren kann, ohne den Treiber zu benachrichtigen.
IRP_MN_QUERY_CAPABILITIES Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig reagieren kann, ohne den Treiber zu benachrichtigen.
|IRP_MN_QUERY_DEVICE_RELATIONS (Bus-, Entfernungs- und Auswurfbeziehungen) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig reagieren kann, ohne den Treiber zu benachrichtigen.
IRP_MN_QUERY_ID Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig reagieren kann, ohne den Treiber zu benachrichtigen.
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (nur KMDF)
IRP_MN_QUERY_PNP_DEVICE_STATE Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig 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 Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig 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 Zustand) EvtDeviceReleaseHardwareEvtIoStop (WdfRequestStopActionPurge Flag) für leistungsverwaltete Warteschlangen EvtDeviceSelfManagedIoFlushEvtIoStop (WdfRequestStopActionPurge Flag) für nicht leistungsverwaltete Warteschlangen EvtDeviceSelfManagedIoCleanupEvtCleanupCallback für WDFDEVICE EvtDestroyCallback für WDFDEVICE

Nach IRP_MN_SURPRISE_REMOVAL:

EvtIoStop (WdfRequestStopActionPurge-Flag) für nicht stromverwaltete Warteschlangen EvtDeviceSelfManagedIoCleanupEvtCleanupCallback für WDFDEVICE EvtDestroyCallback für WDFDEVICE
IRP_MN_SET_LOCK EvtDeviceSetLock (nur KMDF)
^IRP_MN_START_DEVICE

Nach Enumeration:

No changes needed; the translation remains the same. 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)EvtDmaEnablerFlush (nur KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final Zustand) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend Flag) EvtDmaEnablerSelfManagedIoStop (nur KMDF)EvtDmaEnablerDisable (nur KMDF)EvtDmaEnablerFlush (nur KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final Zustand) EvtDeviceReleaseHardwareEvtIoStop (WdfRequestStopActionPurge-Flag) für power-verwaltete Warteschlangen EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Keiner. Der KMDF-Treiber ruft WdfDeviceInitXxx-Methoden auf, um Geräteeigenschaften während der Initialisierung festzulegen, damit das Framework auf diese Abfrage eigenständig reagieren kann, ohne den Treiber zu benachrichtigen.

KMDF-Rückrufe für IRP_MJ_POWER

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

Anmerkung Hinweis: In einem KMDF-Treiber sind Plug- und Play- und Energieverwaltung integrierte Vorgänge, und der Treiber erhält nicht die einzelnen kleineren IRP_MJ_PNP oder IRP_MJ_POWER Anforderungen. Stattdessen ruft das Framework einen Kernsatz von Rückrufen beim Einschalten und einen entsprechenden Satz beim Ausschalten auf und ruft zusätzliche Rückrufe vor und nach diesem Kernsatz je nach Bedarf der einzelnen Plug-and-Play-Anforderungen auf. 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 Frameworkrückrufe
|IRP_MN_SET_POWER für D1, D2 oder D3 (Abschalten) 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 (KMDF only)EvtDmaEnablerSelfManagedIoStart (KMDF only)EvtIoResumeEvtDeviceSelfManagedIoRestart
"IRP_MN_SET_POWER für Sx" Nichts
^IRP_MN_SET_POWER für Sx Nichts
IRP_MN_POWER_SEQUENCE Nichts
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (nur KMDF)
^IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (nur KMDF)