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 uniquement

    Dé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 uniquement

    Retourne 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

Voir aussi

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue