Compartir a través de


IRP de WDM y funciones de devolución de llamada de eventos de WDF

Kernel-Mode Driver Framework (KMDF) y User-Mode Driver Framework (UMDF) admiten un subconjunto de IRP de Windows. En la tabla siguiente se enumeran los principales tipos irP de WDM y las funciones de devolución de llamada de eventos de marco correspondientes. A menos que se especifique lo contrario, las devoluciones de llamada se aplican tanto a KMDF como a UMDF.

Código IRP principal Función de devolución de llamada de eventos de WDF
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreate o EvtIoDefault
IRP_MJ_CREATE_MAILSLOT Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_DEVICE_CHANGE Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl o EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_FLUSH_BUFFERS Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl o EvtIoDefault
IRP_MJ_LOCK_CONTROL Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_PNP Muchos; consulte Devoluciones de llamada de KMDF para obtener IRP_MJ_PNP.
IRP_MJ_POWER Muchos; consulte Devoluciones de llamada de KMDF para IRP_MJ_POWER.
IRP_MJ_QUERY_EA Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_INFORMATION Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_QUOTA Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_SECURITY Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_VOLUME_INFORMATION Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_READ EvtIoRead o EvtIoDefault
IRP_MJ_SET_EA Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_INFORMATION Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_QUOTA Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_SECURITY Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_VOLUME_INFORMATION Sin soporte directo; implemente EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SHUTDOWN

Para controlar objetos de dispositivo, implemente EvtDeviceShutdownNotification (solo KMDF)

Para todos los objetos de dispositivo Plug and Play: no compatibles; implemente EvtDeviceWdmIrpPreprocess (solo KMDF) .

IRP_MJ_SYSTEM_CONTROL Cree objetos WDFWMIPROVIDER y WDFWMIINSTANCE e implemente devoluciones de llamada EvtWmiXxx (solo KMDF).
IRP_MJ_WRITE EvtIoWrite o EvtIoDefault

Devoluciones de llamada de KMDF para IRP_MJ_PNP

En la tabla siguiente se enumeran, en orden de ejecución, las devoluciones de llamada de KMDF que corresponden a los códigos IRP menores para IRP_MJ_PNP. Las flechas indican si un FDO de WDM controla el IRP a medida que se desplaza hacia arriba o hacia abajo la pila.

Nota En un controlador KMDF, Plug and Play y la administración de energía son operaciones integradas y el controlador no recibe las solicitudes individuales de IRP_MJ_PNP menores o IRP_MJ_POWER. En su lugar, el marco llama a un conjunto básico de devoluciones de llamada en el encendido y un conjunto correspondiente en el apagado, y llama a devoluciones de llamada adicionales antes y después de este conjunto de núcleos según corresponda para cada solicitud de Plug and Play individual. Para obtener diagramas completos que muestran las secuencias de encendido y apagado, consulte Porting PnP and Power Management Functionality (Funcionalidad de portabilidad de PnP y administración de energía).

IRP_MJ_PNP código secundario Devoluciones de llamada de KMDF
IRP_MN_CANCEL_REMOVE_DEVICE Ninguno
IRP_MN_CANCEL_STOP_DEVICE Ninguno
IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
IRP_MN_EJECT EvtDeviceEject (solo KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements (solo KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (solo KMDF)
IRP_MN_QUERY_BUS_INFORMATION Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por sí mismo sin notificar al controlador.
IRP_MN_QUERY_CAPABILITIES Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por sí mismo sin notificar al controlador.
IRP_MN_QUERY_DEVICE_RELATIONS (relaciones de bus, remoción y expulsión) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por sí mismo sin notificar al controlador.
IRP_MN_QUERY_ID Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por sí mismo sin notificar al controlador.
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (solo KMDF)
IRP_MN_QUERY_PNP_DEVICE_STATE Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por su cuenta sin notificar al controlador.
IRP_MN_QUERY_REMOVE_DEVICE EvtDeviceQueryRemove
IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery (solo KMDF)
IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (solo KMDF)
IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por su cuenta sin notificar al controlador.
IRP_MN_REMOVE_DEVICE

Después de IRP_MN_QUERY_REMOVE_DEVICE:

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag ) EvtDmaEnablerSelfManagedIoStop (solo KMDF)EvtDmaEnablerDisable (kmdf only)EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop ( WdfRequestStopActionPurge flag) for power-managed queues EvtDeviceSelfManagedIoFlushEvtIoStop (WdfRequestStopActionPurge flag) for non-power-managed queues EvtDeviceSelfManagedIoCleanupEvtCleanupCallback for WDFDEVICE EvtDestroyCallback for WDFDEVICE

Después de IRP_MN_SURPRISE_REMOVAL:

EvtIoStop (marca WdfRequestStopActionPurge ) para colas no administradas por energía EvtDeviceSelfManagedIoCleanupEvtCleanupCallback para WDFDEVICE EvtDestroyCallback para WDFDEVICE
IRP_MN_SET_LOCK EvtDeviceSetLock (solo KMDF)
IRP_MN_START_DEVICE

Después de la enumeración:

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

Después de IRP_MN_STOP_DEVICE:

EvtDeviceRemoveAddedResources (solo KMDF)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (solo KMDF)EvtDmaEnablerEnable (solo KMDF)EvtDmaEnablerSelfManagedIoStart (solo KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (solo KMDF)EvtDmaEnablerDisable (kmdf only)EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (solo KMDF)EvtDmaEnablerDisable (KMDF only))EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop (Marca WdfRequestStopActionPurge ) para colas administradas por energía EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Ninguno. El controlador KMDF llama a los métodos WdfDeviceInitXxx para establecer las propiedades del dispositivo durante la inicialización para que el marco pueda responder a esta consulta por su cuenta sin notificar al controlador.

Devoluciones de llamada de KMDF para IRP_MJ_POWER

En la tabla siguiente se enumeran, en orden de ejecución, las devoluciones de llamada de KMDF que corresponden a los códigos IRP menores para IRP_MJ_POWER. Las flechas indican si un FDO de WDM controla el IRP a medida que se desplaza hacia arriba o hacia abajo la pila.

Nota Nota: En un controlador KMDF, Plug and Play y la administración de energía son operaciones integradas y el controlador no recibe las solicitudes individuales de IRP_MJ_PNP menores o IRP_MJ_POWER. En su lugar, el marco llama a un conjunto básico de devoluciones de llamada en el encendido y un conjunto correspondiente en el apagado, y llama a devoluciones de llamada adicionales antes y después de este conjunto de núcleos según corresponda para cada solicitud de Plug and Play individual. Para ver diagramas completos que muestran las secuencias de encendido y apagado, consulte Porting PnP and Power Management Functionality (Funcionalidad de migración de PnP y administración de energía).

IRP_MJ_POWER código secundario Devoluciones de llamada de marco
IRP_MN_SET_POWER para D1, D2 o D3 (apagado) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag ) EvtDeviceArmWakeFromS0 o EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (solo KMDF)EvtDmaEnablerDisable (solo KMDF)EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
IRP_MN_SET_POWER para D0 (encendido) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (kmdf only)EvtDmaEnablerEnable (solo KMDF)EvtDmaEnablerSelfManagedIoStart (KMDF only)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_SET_POWER para Sx Ninguno
IRP_MN_SET_POWER para Sx Ninguno
IRP_MN_POWER_SEQUENCE Ninguno
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (solo KMDF)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (solo KMDF)