EVT_WDFDEVICE_WDM_IRP_DISPATCH fonction de rappel (wdfdevice.h)
[S’applique à KMDF et UMDF]
La fonction de rappel d’événement EvtDeviceWdmIrpDispatch d’un pilote reçoit un IRP avant que l’infrastructure ne traite l’IRP.
Syntaxe
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
Paramètres
[in] Device
Handle pour un objet d’appareil d’infrastructure.
[in] MajorFunction
L’un des codes de fonction principale IRP définis dans wdm.h.
[in] MinorFunction
Un des codes de fonction secondaire IRP d’E/S qui sont définis dans wdm.h pour le code MajorFunction .
[in] Code
Spécifie une valeur de code de contrôle d’E/S. Ce paramètre est valide uniquement si MajorFunction est défini sur IRP_MJ_DEVICE_CONTROL.
[in] DriverContext
Pointeur non typé vers les informations de contexte définies par le pilote que le pilote a fournies quand il a appelé WdfDeviceConfigureWdmIrpDispatchCallback.
[in, out] Irp
Pointeur vers une structure IRP.
[in] DispatchContext
Pointeur non typé vers les informations de contexte de répartition de l’infrastructure. Le pilote doit fournir ce paramètre lorsqu’il appelle WdfDeviceWdmDispatchIrp.
Valeur retournée
La fonction de rappel EvtDeviceWdmIrpDispatch doit :
- Retourne la valeur que la méthode WdfDeviceWdmDispatchIrp retourne, si la fonction de rappel appelle cette méthode.
- Retourne la valeur que la méthode WdfDeviceWdmDispatchIrpToIoQueue retourne si la fonction de rappel appelle cette méthode.
- KMDF uniquement Définissez le membre IoStatus.Status de l’IRP sur STATUS_SUCCESS ou une autre valeur de status pour laquelle NT_SUCCESS(status) est égal à TRUE, puis retournez la même valeur (après avoir appelé IoCompleteRequest) si la fonction de rappel termine correctement l’IRP reçue.
- KMDF uniquementDéfinissez le membre IoStatus.Status de l’IRP sur une valeur status pour laquelle NT_SUCCESS(status) est FALSE, puis retournez la même valeur (après avoir appelé IoCompleteRequest) si la fonction de rappel détecte une erreur.
- KMDF uniquementRetourne STATUS_PENDING si la fonction de rappel appelle IoMarkIrpPending.
Remarques
La fonction de rappel EvtDeviceWdmIrpDispatch doit uniquement être utilisée pour sélectionner une file d’attente spécifique pour un IRP. Pour ce faire, le pilote appelle la méthode WdfDeviceWdmDispatchIrpToIoQueue à partir de la fonction de rappel.
Si, après avoir examiné un IRP dans cette fonction de rappel, le pilote ne sait pas comment distribuer l’IRP, le pilote peut appeler WdfDeviceWdmDispatchIrp pour renvoyer l’IRP à l’infrastructure pour la gestion par défaut.
Un pilote UMDF doit appeler WdfDeviceWdmDispatchIrp ou WdfDeviceWdmDispatchIrpToIoQueue à partir de cette fonction de rappel. Un pilote KMDF a la possibilité supplémentaire d’appeler ni l’un ni l’autre, et de terminer l’IRP ou de le marquer en attente.
Pour inscrire une fonction de rappel EvtDeviceWdmIrpDispatch , votre pilote doit appeler WdfDeviceConfigureWdmIrpDispatchCallback.
Dans sa fonction de rappel EvtDeviceWdmIrpDispatch , un pilote ne doit pas définir une routine d’achèvement. Si une routine d’achèvement est nécessaire, un pilote KMDF peut fournir une fonction de rappel EvtDeviceWdmIrpPreprocess au lieu de EvtDeviceWdmIrpDispatch.
Pour plus d’informations sur la spécification de files d’attente pour les irPs à mesure qu’ils arrivent, consultez Dispatching IRPs to I/O Queues.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.11 |
Version UMDF minimale | 2.17 |
En-tête | wdfdevice.h (inclure Wdf.h) |
IRQL | <=DISPATCH_LEVEL |