Réutilisation d’objets de demande d’infrastructure

Pour améliorer les performances, les pilotes basés sur l’infrastructure qui créent et envoient de nombreuses requêtes asynchrones presque identiques à une cible d’E/S peuvent réutiliser des objets de requête au lieu de créer un nouvel objet de requête pour chaque requête. Un pilote peut réutiliser un objet de requête une fois la demande terminée.

Si un pilote a créé un objet de requête en appelant WdfRequestCreate ou WdfRequestCreateFromIrp, il peut réutiliser la demande en appelant WdfRequestReuse. Un pilote peut également réutiliser les objets de requête qu’il a reçus de l’infrastructure dans ses files d’attente d’E/S, mais il ne peut pas modifier l’IRP que contient l’objet de demande reçue.

Si vous veillez à éviter les situations qui entraînent l’échec des valeurs de retour décrites dans WdfRequestReuse, votre pilote peut appeler WdfRequestReuse à partir d’une fonction de rappel CompletionRoutine . (La fonction de rappel CompletionRoutine a une valeur de retour VOID et ne peut donc pas signaler d’erreurs.)

Si votre pilote fournit une fonction de rappel CompletionRoutine pour un objet de requête qu’il réutilise, le pilote doit appeler WdfRequestSetCompletionRoutine après avoir appelé WdfRequestReuse.