Partager via


EVT_WDFDEVICE_WDM_IRP_PREPROCESS fonction de rappel (wdfdevice.h)

[S’applique à KMDF uniquement]

La fonction de rappel d’événement EvtDeviceWdmIrpPreprocess d’un pilote reçoit un IRP avant que l’infrastructure ne traite l’IRP.

Syntaxe

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
  [in]      WDFDEVICE Device,
  [in, out] PIRP Irp
)
{...}

Paramètres

[in] Device

Handle pour un objet d’appareil d’infrastructure.

[in, out] Irp

Pointeur vers une structure IRP .

Valeur retournée

La fonction de rappel EvtDeviceWdmIrpPreprocess doit :

  • 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çu.
  • 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.
  • Retournez STATUS_PENDING, si la fonction de rappel appelle IoMarkIrpPending.
  • Retourne la valeur que la méthode WdfDeviceWdmDispatchPreprocessedIrp retourne si la fonction de rappel appelle cette méthode.

Remarques

Pour inscrire une fonction de rappel EvtDeviceWdmIrpPreprocess , votre pilote doit appeler WdfDeviceInitAssignWdmIrpPreprocessCallback.

Votre pilote peut utiliser une fonction de rappel EvtDeviceWdmIrpPreprocess pour effectuer tout ou partie des opérations suivantes :

  • Gérez un IRP que l’infrastructure ne prend pas en charge en suivant les règles WDM pour la gestion des IRP.
  • Prétraiter un IRP avant que l’infrastructure ne le gère.
  • Définissez une routine d’achèvement afin que le pilote puisse post-traiter un IRP après que l’infrastructure l’a géré.
Pour plus d’informations sur l’implémentation d’une fonction de rappel EvtDeviceWdmIrpPreprocess , consultez Gestion des irps WDM en dehors de l’infrastructure.

Si vous souhaitez que l’infrastructure gère par la suite l’IRP comme si la fonction de rappel EvtDeviceWdmIrpPreprocess n’avait pas été appelée, la fonction de rappel doit appeler WdfDeviceWdmDispatchPreprocessedIrp pour renvoyer l’IRP à l’infrastructure.

Si votre pilote inscrit une fonction de rappel EvtDeviceWdmIrpPreprocess , l’infrastructure ajoute un emplacement de pile d’E/S supplémentaire aux IRP que la fonction de rappel reçoit. L’emplacement de pile d’E/S supplémentaire permet à la fonction de rappel de définir une routine IoCompletion avant d’appeler WdfDeviceWdmDispatchPreprocessedIrp.

La fonction de rappel EvtDeviceWdmIrpPreprocess est appelée au niveau de l’IRQL du thread appelant. L’IRQL est déterminé par le type d’IRP que le framework passe à EvtDeviceWdmIrpPreprocess. Par exemple, si le gestionnaire PnP envoie IRP_MN_QUERY_DEVICE_RELATIONS à IRQL = PASSIVE_LEVEL, le framework appelle EvtDeviceWdmIrpPreprocess à IRQL = PASSIVE_LEVEL.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
En-tête wdfdevice.h (inclure Wdf.h)
IRQL <=DISPATCH_LEVEL

Voir aussi

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp