Condividi tramite


Funzioni di callback eventi WDM e WDF

Kernel-Mode Driver Framework (KMDF) e User-Mode Driver Framework (UMDF) supportano un subset di IRP Windows. Nella tabella seguente sono elencati i principali tipi di IRP WDM e le funzioni di callback degli eventi del framework corrispondenti. A meno che non sia specificato diversamente, i callback si applicano sia a KMDF che a UMDF.

Codice IRP principale Funzione di callback dell'evento WDF
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreare o EvtIoDefault
IRP_MJ_CREATE_MAILSLOT Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_DEVICE_CHANGE Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl o EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_FLUSH_BUFFERS Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl o EvtIoDefault
IRP_MJ_LOCK_CONTROL Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_PNP Molti; vedere Callback kmDF per IRP_MJ_PNP.
IRP_MJ_POWER Molti; vedere Callback kmDF per IRP_MJ_POWER.
IRP_MJ_QUERY_EA Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_INFORMATION Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_QUOTA Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_SECURITY Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_QUERY_VOLUME_INFORMATION Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_READ EvtIoRead o EvtIoDefault
IRP_MJ_SET_EA Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_INFORMATION Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_QUOTA Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_SECURITY Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SET_VOLUME_INFORMATION Nessun supporto diretto; implementare EvtDeviceWdmIrpPreprocess (solo KMDF)
IRP_MJ_SHUTDOWN

Per gli oggetti dispositivo di controllo, implementare EvtDeviceShutdownNotification (solo KMDF)

Per tutti gli oggetti dispositivo Plug and Play: non supportato; implementare EvtDeviceWdmIrpPreprocess (solo KMDF).

IRP_MJ_SYSTEM_CONTROL Creare oggetti WDFWMIPROVIDER e WDFWMITANCE e implementare callback EvtWmiXxx (solo KMDF).
IRP_MJ_WRITE EvtIoWrite o EvtIoDefault

Callback kmDF per IRP_MJ_PNP

La tabella seguente elenca, in ordine di esecuzione, i callback kmDF che corrispondono ai codici IRP secondari per IRP_MJ_PNP. Le frecce indicano se un FDO WDM gestisce l'IRP durante il viaggio verso l'alto o verso il basso dello stack.

Nota In un driver kmDF, Plug and Play e gestione energia sono operazioni integrate e il driver non riceve le singole richieste di IRP_MJ_PNP o IRP_MJ_POWER. Il framework chiama invece un set di callback di base in fase di alimentazione e un set corrispondente in fase di alimentazione e chiama callback aggiuntivi prima e dopo questo set di core come appropriato per ogni singola richiesta di Plug and Play. Per diagrammi completi che mostrano le sequenze di alimentazione e risparmio energia, vedere Conversione di PnP e funzionalità di Power Management.

IRP_MJ_PNP codice secondario Callback del servizio di gestione delle chiavi
^IRP_MN_CANCEL_REMOVE_DEVICE Nessuno
^IRP_MN_CANCEL_STOP_DEVICE Nessuno
^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 Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere a questa query autonomamente senza notificare il driver.
IRP_MN_QUERY_CAPABILITIES Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere a questa query autonomamente senza notificare il driver.
^IRP_MN_QUERY_DEVICE_RELATIONS (bus, rimozione ed esezione delle relazioni) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere a questa query autonomamente senza notificare il driver.
IRP_MN_QUERY_ID Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere a questa query autonomamente senza notificare il driver.
^IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (solo KMDF)
IRP_MN_QUERY_PNP_DEVICE_STATE Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere autonomamente a questa query senza notificare al driver.
^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 Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere autonomamente a questa query senza notificare al driver.
.IRP_MN_REMOVE_DEVICE

Dopo IRP_MN_QUERY_REMOVE_DEVICE:

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (solo KMDF)EvtDmaEnablerDisable (solo KMDF)))EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop ( WdfRequestStopActionPurge flag) per le code gestite da energia EvtDeviceSelfManagedIoFlushEvtIoStop (flag WdfRequestStopActionPurge) per le code non gestite da energia EvtDeviceSelfManagedIoCleanupEvtCleanupCallback per WDFDEVICE EvtDestroyCallback per WDFDEVICE

Dopo IRP_MN_SURPRISE_REMOVAL:

EvtIoStop (flag WdfRequestStopActionPurge ) per code non gestite da energia EvtDeviceSelfManagedIoCleanupEvtCleanupCallback per WDFDEVICE EvtDestroyCallback per WDFDEVICE
^IRP_MN_SET_LOCK EvtDeviceSetLock (solo KMDF)
^IRP_MN_START_DEVICE

Dopo l'enumerazione:

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

Dopo 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 (Solo KMDF)EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardware
^IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDmaEnablerSelfManagedIoStop (solo KMDF)EvtDmaEnablerDisable (solo KMDF)EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final state) EvtDeviceReleaseHardwareEvtIoStop (Flag WdfRequestStopActionPurge ) per le code gestite dall'alimentazione EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG Nessuno. Il driver KMDF chiama i metodi WdfDeviceInitXxx per impostare le proprietà del dispositivo durante l'inizializzazione in modo che il framework possa rispondere autonomamente a questa query senza notificare al driver.

Callback KMDF per IRP_MJ_POWER

Nella tabella seguente sono elencati, in ordine di esecuzione, i callback kmdf che corrispondono ai codici IRP secondari per IRP_MJ_POWER. Le frecce indicano se un fdO WDM gestisce l'IRP durante il viaggio verso l'alto o verso il basso dello stack.

Nota Nota: in un driver KMDF, Plug and Play e risparmio energia sono operazioni integrate e il driver non riceve le singole richieste di IRP_MJ_PNP o IRP_MJ_POWER. Il framework chiama invece un set di core di callback in fase di accensione e un set corrispondente in fase di accensione e chiama callback aggiuntivi prima e dopo questo set di core in base alle esigenze di ogni singola richiesta Plug and Play. Per diagrammi completi che mostrano le sequenze di risparmio energia e risparmio energia, vedere Porting PnP and Power Management Functionality (Conversione di PnP e funzionalità di risparmio energia).

IRP_MJ_POWER codice secondario Callback del framework
.IRP_MN_SET_POWER per D1, D2 o D3 (spegnimento) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) EvtDeviceArmWakeFromS0 o EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManaged IoStop (solo KMDF)EvtDmaEnablerDisable (solo KMDF)EvtDmaEnablerFlush (solo KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
.IRP_MN_SET_POWER per D0 (alimentazione) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (solo KMDF)EvtDmaEnablerEnable (solo KMDF)EvtDmaEnablerSelfManagedIoStart (solo KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart
^IRP_MN_SET_POWER per Sx Nessuno
.IRP_MN_SET_POWER per Sx Nessuno
IRP_MN_POWER_SEQUENCE Nessuno
^IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (solo KMDF)
-IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (solo KMDF)