Sdílet prostřednictvím


WDM IRPs a funkce zpětného volání událostí WDF

Kernel-Mode Driver Framework (KMDF) a User-Mode Driver Framework (UMDF) podporují podmnožinu IRP Windows. Následující tabulka uvádí hlavní typy IRP WDM a odpovídající funkce zpětného volání událostí rozhraní. Pokud není uvedeno jinak, zpětná volání se vztahují jak na KMDF, tak na UMDF.

Hlavní kód IRP Funkce zpětného volání události WDF
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreate nebo EvtIoDefault
IRP_MJ_CREATE_MAILSLOT Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_DEVICE_CHANGE Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl nebo EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL Žádná přímá podpora; implementace EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_FLUSH_BUFFERS Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl nebo EvtIoDefault
IRP_MJ_LOCK_CONTROL Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_PNP Mnoho; viz callbacky KMDF pro IRP_MJ_PNP.
IRP_MJ_POWER Mnoho; viz zpětná volání KMDF pro IRP_MJ_POWER.
IRP_MJ_QUERY_EA Žádná přímá podpora; implementace EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_QUERY_INFORMATION Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_QUERY_QUOTA Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_QUERY_SECURITY Žádná přímá podpora; implementace EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_QUERY_VOLUME_INFORMATION Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_READ EvtIoRead nebo EvtIoDefault
IRP_MJ_SET_EA Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_SET_INFORMATION Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_SET_QUOTA Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_SET_SECURITY Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_SET_VOLUME_INFORMATION Žádná přímá podpora; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF)
IRP_MJ_SHUTDOWN

U řídicích objektů zařízení implementujte EvtDeviceShutdownNotification (pouze KMDF).

Pro všechny objekty zařízení Plug and Play: Nepodporuje se; implementujte EvtDeviceWdmIrpPreprocess (pouze KMDF).

IRP_MJ_SYSTEM_CONTROL Vytvořte objekty WDFWMIPROVIDER a WDFWMIINSTANCE a implementujte EvtWmiXxx (pouze KMDF) zpětná volání.
IRP_MJ_WRITE EvtIoWrite nebo EvtIoDefault

Zpětná volání KMDF pro IRP_MJ_PNP

Následující tabulka uvádí v pořadí provádění zpětných volání KMDF, které odpovídají menším kódům protokolu IRP pro IRP_MJ_PNP. Šipky označují, jestli nástroj WDM FDO zpracovává IRP při pohybu nahoru nebo dolů zásobníku.

Poznámka V ovladači KMDF jsou integrované operace plug-and-play a řízení spotřeby a ovladač neobdrží jednotlivé menší IRP_MJ_PNP ani IRP_MJ_POWER žádosti. Místo toho architektura volá základní sadu zpětných volání při zapnutí a odpovídající sadu při vypnutí a volá další zpětná volání před a po této základní sadě podle potřeby pro každou jednotlivou žádost Plug and Play. Kompletní diagramy, které znázorňují sekvence zapnutí a vypnutí napájení, najdete v tématu Portování funkčnosti PnP a řízení spotřeby.

IRP_MJ_PNP pomocný kód Kolbeky KMDF
IRP_MN_CANCEL_REMOVE_DEVICE Žádný
IRP_MN_CANCEL_STOP_DEVICE Žádný
IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
IRP_MN_EJECT EvtDeviceEject (pouze KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements (pouze pro KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (jenom KMDF)
IRP_MN_QUERY_BUS_INFORMATION Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.
IRP_MN_QUERY_CAPABILITIES Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.
IRP_MN_QUERY_DEVICE_RELATIONS (vztahy sběrnice, vyjmutí a vysunutí) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.
IRP_MN_QUERY_ID Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (jenom KMDF)
IRP_MN_QUERY_PNP_DEVICE_STATE Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.
IRP_MN_QUERY_REMOVE_DEVICE EvtDeviceQueryRemove
IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery (jenom KMDF)
IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (jenom KMDF)
IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.
IRP_MN_REMOVE_DEVICE

Po IRP_MN_QUERY_REMOVE_DEVICE:

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend příznak) EvtDmaEnablerSelfManagedIoStop (jenom KMDF)EvtDmaEnablerDisable (jenom KMDF)EvtDmaEnablerFlush (jenom KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop (WdfRequestStopActionPurge příznak) pro fronty spravované výkonem EvtDeviceSelfManagedIoFlushEvtIoStop (WdfRequestStopActionPurge příznak) pro fronty nespravované výkonem EvtDeviceSelfManagedIoCleanupEvtCleanupCallback pro WDFDEVICE EvtDestroyCallback pro WDFDEVICE

Po IRP_MN_SURPRISE_REMOVAL:

EvtIoStop (příznak) (WdfRequestStopActionPurge) pro fronty nespravované napájením EvtDeviceSelfManagedIoCleanupEvtCleanupCallback pro WDFDEVICE EvtDestroyCallback pro WDFDEVICE
IRP_MN_SET_LOCK EvtDeviceSetLock (pouze KMDF)
IRP_MN_START_DEVICE

Po výčtu:

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

Po IRP_MN_STOP_DEVICE:

EvtDeviceRemoveAddedResources (jenom KMDF)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (jenom KMDF)EvtDmaEnablerEnable (jenom KMDF)EvtDmaEnablerSelfManagedIoStart (jenom KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (jenom KMDF)EvtDmaEnablerDisable (jenom KMDF)EvtDmaEnablerFlush (jenom KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final stav) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend příznak) EvtDmaEnablerSelfManagedIoStop (pouze KMDF)EvtDmaEnablerDisable (pouze KMDF)EvtDmaEnablerFlush (pouze KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final stav) EvtDeviceReleaseHardwareEvtIoStop (WdfRequestStopActionPurge příznak) pro fronty spravované výkonem EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Žádné. Ovladač KMDF volá WdfDeviceInitXxx metody pro nastavení vlastností zařízení během inicializace tak, aby architektura na tento dotaz sama reagovala bez upozornění ovladače.

Zpětná volání KMDF pro IRP_MJ_POWER

Následující tabulka uvádí v pořadí provádění zpětná volání KMDF, která odpovídají menším kódům protokolu IRP pro IRP_MJ_POWER. Šipky označují, zda WDM FDO zpracovává IRP při pohybu nahoru nebo dolů ve zásobníku.

Poznámka Poznámka: V ovladači KMDF jsou integrované operace plug-and play a řízení spotřeby a ovladač neobdrží jednotlivé menší IRP_MJ_PNP ani IRP_MJ_POWER žádosti. Místo toho architektura volá základní sadu zpětných volání při zapnutí napájení a odpovídající sadu při vypnutí napájení, a volá další zpětná volání před a po této základní sadě podle potřeby pro každou jednotlivou žádost typu Plug and Play. Komplexní diagramy, které znázorňují posloupnosti napájení a snížení výkonu, najdete v tématu Porting PnP a Funkce řízení spotřeby.

IRP_MJ_POWER vedlejší kód Zpětná volání rámce
IRP_MN_SET_POWER pro D1, D2 nebo D3 (snížení spotřeby energie) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend) EvtDeviceArmWakeFromS0 nebo EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (jen KMDF)EvtDmaEnablerDisable (jen KMDF)EvtDmaEnablerFlush (jen KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
IRP_MN_SET_POWER pro D0 (napájení) cs-CZ: EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (jenom KMDF)EvtDmaEnablerEnable (jenom KMDF)EvtDmaEnablerSelfManagedIoStart (jenom KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_SET_POWER pro Sx Žádný
IRP_MN_SET_POWER pro Sx Žádný
IRP_MN_POWER_SEQUENCE Žádný
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (pouze KMDF)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (pouze KMDF)