Partilhar via


Funções de retorno de chamada de evento WDM IRPs e WDF

Kernel-Mode Driver Framework (KMDF) e UMDF (User-Mode Driver Framework) dão suporte a um subconjunto de IRPs do Windows. A tabela a seguir lista os principais tipos de IRP do WDM e as funções de retorno de chamada de evento de estrutura correspondentes. A menos que especificado de outra forma, os retornos de chamada se aplicam a KMDF e UMDF.

Código IRP principal Função de retorno de chamada de evento WDF
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreate ou EvtIoDefault
IRP_MJ_CREATE_MAILSLOT Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_DEVICE_CHANGE Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl ou EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_FLUSH_BUFFERS Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl ou EvtIoDefault
IRP_MJ_LOCK_CONTROL Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_PNP Muitos; consulte Retornos de chamada KMDF para IRP_MJ_PNP.
IRP_MJ_POWER Muitos; consulte Retornos de chamada KMDF para IRP_MJ_POWER.
IRP_MJ_QUERY_EA Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_QUERY_INFORMATION Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_QUERY_QUOTA Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_QUERY_SECURITY Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_QUERY_VOLUME_INFORMATION Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_READ EvtIoRead ou EvtIoDefault
IRP_MJ_SET_EA Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_SET_INFORMATION Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_SET_QUOTA Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_SET_SECURITY Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_SET_VOLUME_INFORMATION Sem suporte direto; implemente EvtDeviceWdmIrpPreprocess (somente KMDF)
IRP_MJ_SHUTDOWN

Para objetos de dispositivo de controle, implemente EvtDeviceShutdownNotification (somente KMDF)

Para todos os objetos de dispositivo Plug and Play: sem suporte; implemente EvtDeviceWdmIrpPreprocess (somente KMDF).

IRP_MJ_SYSTEM_CONTROL Crie objetos WDFWMIPROVIDER e WDFWMIINSTANCE e implemente retornos de chamada EvtWmiXxx (somente KMDF ).
IRP_MJ_WRITE EvtIoWrite ou EvtIoDefault

Retornos de chamada KMDF para IRP_MJ_PNP

A tabela a seguir lista, em ordem de execução, os retornos de chamada KMDF que correspondem aos códigos IRP secundários para IRP_MJ_PNP. As setas indicam se um FDO do WDM manipula o IRP à medida que ele viaja para cima ou para baixo na pilha.

Nota Em um driver KMDF, Plug and Play e gerenciamento de energia são operações integradas e o driver não recebe as solicitações individuais de IRP_MJ_PNP ou IRP_MJ_POWER secundárias. Em vez disso, a estrutura chama um conjunto principal de retornos de chamada na ligação e um conjunto correspondente na desligar e chama retornos de chamada adicionais antes e depois desse conjunto de núcleos, conforme apropriado para cada solicitação de Plug and Play individual. Para obter diagramas abrangentes que mostram as sequências de ligar e desligar, confira Portabilidade de PnP e Funcionalidade de Gerenciamento de Energia.

IRP_MJ_PNP código secundário Retornos de chamada KMDF
IRP_MN_CANCEL_REMOVE_DEVICE Nenhum
IRP_MN_CANCEL_STOP_DEVICE Nenhum
IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
IRP_MN_EJECT EvtDeviceEject (somente KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements (somente KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (somente KMDF)
IRP_MN_QUERY_BUS_INFORMATION Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.
IRP_MN_QUERY_CAPABILITIES Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.
IRP_MN_QUERY_DEVICE_RELATIONS (relações de ônibus, remoção e ejeção) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.
IRP_MN_QUERY_ID Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (somente KMDF)
IRP_MN_QUERY_PNP_DEVICE_STATE Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.
IRP_MN_QUERY_REMOVE_DEVICE EvtDeviceQueryRemove
IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery (somente KMDF)
IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (somente KMDF)
IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.
IRP_MN_REMOVE_DEVICE

Após IRP_MN_QUERY_REMOVE_DEVICE:

EvtDeviceSelfManagedIoSuspendEvtIoStop (sinalizador WdfRequestStopActionSuspend ) EvtDmaEnablerSelfManagedIoStop (somente KMDF)EvtDmaEnablerDisable (somente KMDF)EvtDDmaEnablerFlush (somente KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (estado WdfPowerDeviceD3Final ) EvtDeviceReleaseHardwareEvtIoStop ( Sinalizador WdfRequestStopActionPurge ) para filas gerenciadas por energia EvtDeviceSelfManagedIoFlushEvtIoStop (sinalizador WdfRequestStopActionPurge ) para filas não gerenciadas por energia EvtDeviceSelfManagedIoCleanupEvtCleanupCallback para WDFDEVICE EvtDestroyCallback para WDFDEVICE

Após IRP_MN_SURPRISE_REMOVAL:

EvtIoStop (sinalizador WdfRequestStopActionPurge ) para filas não gerenciadas por energia EvtDeviceSelfManagedIoCleanupEvtCleanupCallback para WDFDEVICE EvtDestroyCallback para WDFDEVICE
IRP_MN_SET_LOCK EvtDeviceSetLock (somente KMDF)
IRP_MN_START_DEVICE

Após a enumeração:

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

Após IRP_MN_STOP_DEVICE:

EvtDeviceRemoveAddedResources (somente KMDF)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (somente KMDF)EvtDmaEnablerEnable (somente KMDF)EvtDmaEnablerSelfManagedIoStart (somente KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (sinalizador WdfRequestStopActionSuspend ) EvtDmaEnablerSelfManagedIoStop (somente KMDF)EvtDmaEnablerDisable (somente KMDF)EvtDmaEnablerFlush (somente KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (estado WdfPowerDeviceD3Final ) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (sinalizador WdfRequestStopActionSuspend ) EvtDmaEnablerSelfManagedIoStop (somente KMDF)EvtDmaEnablerDisable (KMD SomenteF)EvtDmaEnablerFlush (somente KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (estado WdfPowerDeviceD3Final ) EvtDeviceReleaseHardwareEvtIoStop (Sinalizador WdfRequestStopActionPurge ) para filas gerenciadas por energia EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Nenhum. O driver KMDF chama métodos WdfDeviceInitXxx para definir propriedades do dispositivo durante a inicialização para que a estrutura possa responder a essa consulta por conta própria sem notificar o driver.

Retornos de chamada KMDF para IRP_MJ_POWER

A tabela a seguir lista, em ordem de execução, os retornos de chamada KMDF que correspondem aos códigos IRP secundários para IRP_MJ_POWER. As setas indicam se um FDO do WDM manipula o IRP enquanto ele viaja para cima ou para baixo na pilha.

Nota Observação: em um driver KMDF, Plug and Play e gerenciamento de energia são operações integradas e o driver não recebe as solicitações individuais de IRP_MJ_PNP secundárias ou IRP_MJ_POWER. Em vez disso, a estrutura chama um conjunto principal de retornos de chamada na ligar/desligar e um conjunto correspondente na desligar e chama retornos de chamada adicionais antes e depois desse conjunto de núcleos conforme apropriado para cada solicitação de Plug and Play individual. Para diagramas abrangentes que mostram as sequências de ligar e desligar, consulte Portando PnP e Funcionalidade de Gerenciamento de Energia.

IRP_MJ_POWER código secundário Retornos de chamada da estrutura
IRP_MN_SET_POWER para D1, D2 ou D3 (desligar) EvtDeviceSelfManagedIoSuspendEvtIoStop (sinalizador WdfRequestStopActionSuspend ) EvtDeviceArmWakeFromS0 ou EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagEdIoStop (somente KMDF)EvtDmaEnablerDisable (somente KMDF)EvtDmaEnablerFlush (somente KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
IRP_MN_SET_POWER para D0 (ligar) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (somente KMDF)EvtDmaEnablerEnable (somente KMDF)EvtDmaEnablerSelfManagedIoStart (somente KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_SET_POWER para Sx Nenhum
IRP_MN_SET_POWER para Sx Nenhum
IRP_MN_POWER_SEQUENCE Nenhum
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (somente KMDF)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (somente KMDF)