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.
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 |