Partager via


EVT_WDFDEVICE_WDM_IRP_PREPROCESS fonction de rappel (wdfdevice.h)

[S’applique uniquement à KMDF]

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

Syntaxe

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

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

Paramètres

[in] Device

Handle vers un objet d’appareil framework.

[in, out] Irp

Pointeur vers une structure IRP.

Valeur de retour

La fonction de rappel EvtDeviceWdmIrpPreprocess doit :

  • Définissez le membre IoStatus.Status de l’IRP sur STATUS_SUCCESS ou une autre valeur d’état pour laquelle NT_SUCCESS(état) 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.
  • Définissez l'IoStatus.Status membre de l’IRP sur une valeur d’état pour laquelle NT_SUCCESS(état) est égal à FALSE, puis retournez la même valeur (après l’appel d’IoCompleteRequest), si la fonction de rappel détecte une erreur.
  • Retourne STATUS_PENDING, si la fonction de rappel appelle IoMarkIrpPending.
  • Retourne la valeur retournée par la méthode WdfDeviceWdmDispatchPreprocessedIrp, 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 l’une ou l’autre 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 irPs.
  • Prétraiter un IRP avant que l’infrastructure ne le gère.
  • Définissez une routine d’achèvement afin que le pilote puisse posttraiter un IRP après que l’infrastructure la gère.
Pour plus d’informations sur l’implémentation d’une fonction de rappel EvtDeviceWdmIrpPreprocess, consultez Gestion des irps WDM en dehors du framework.

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

Si votre pilote inscrit un EvtDeviceWdmIrpPreprocess fonction de rappel, l’infrastructure ajoute un emplacement de pile d’E/S supplémentaire aux IRP reçues par la fonction de rappel. 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 du runtime d’intégration 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, l’infrastructure appelle EvtDeviceWdmIrpPreprocess à IRQL = PASSIVE_LEVEL.

Exigences

Exigence Valeur
plateforme cible Universel
version minimale de KMDF 1.0
d’en-tête wdfdevice.h (include Wdf.h)
IRQL <=DISPATCH_LEVEL

Voir aussi

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp