WdfRequestRetrieveOutputWdmMdl, fonction (wdfrequest.h)
[S’applique uniquement à KMDF]
La méthode WdfRequestRetrieveOutputWdmMdl récupère une liste de descripteurs de mémoire (MDL) qui représente la mémoire tampon de sortie d’une demande d’E/S.
Syntaxe
NTSTATUS WdfRequestRetrieveOutputWdmMdl(
[in] WDFREQUEST Request,
[out] PMDL *Mdl
);
Paramètres
[in] Request
Handle d’un objet de requête d’infrastructure.
[out] Mdl
Pointeur vers un emplacement qui reçoit un pointeur vers un MDL.
Valeur retournée
WdfRequestRetrieveOutputWdmMdl retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :
Code de retour | Description |
---|---|
|
Un paramètre d’entrée n’est pas valide. |
|
Le type de requête n’est pas valide ou la demande n’utilise ni e/S en mémoire tampon ni directe. Pour plus d’informations sur les méthodes prises en charge pour accéder aux mémoires tampons de données, consultez la section Remarques suivante. |
|
La demande a déjà été effectuée. |
|
La longueur de la mémoire tampon d’entrée est égale à zéro. |
|
La mémoire est insuffisante. |
Cette méthode peut également retourner d’autres valeurs NTSTATUS.
Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.
Remarques
La mémoire tampon de sortie d’une requête reçoit des informations, telles que les données d’un disque, que le pilote fournit à l’initiateur de la demande. Votre pilote peut appeler WdfRequestRetrieveOutputWdmMdl pour une demande de lecture ou une demande de contrôle d’E/S d’appareil, mais pas pour une demande d’écriture (car les demandes d’écriture ne fournissent pas de données de sortie).
La méthode WdfRequestRetrieveOutputWdmMdl récupère la mdL de la mémoire tampon de sortie pour les demandes d’E/S qui utilisent la méthode d’E/S mise en mémoire tampon ou la méthode d’E/S directe pour accéder aux mémoires tampons de données. Si le code de contrôle d’E/S de la demande est IRP_MJ_INTERNAL_DEVICE_CONTROL, ou si la demande provient d’un autre pilote en mode noyau, WdfRequestRetrieveOutputWdmMdl prend également en charge les demandes d’E/S qui n’utilisent ni mémoire tampon ni E/S directes.
Si WdfRequestRetrieveOutputWdmMdl retourne STATUS_SUCCESS, le pilote reçoit un pointeur vers un MDL qui décrit la mémoire tampon de sortie.
Le pilote ne doit pas accéder à la MDL d’une demande après avoir terminé la demande d’E/S.
Pour plus d’informations sur WdfRequestRetrieveOutputWdmMdl, consultez Accès aux mémoires tampons de données dans les pilotes Framework-Based.
Exemples
L’exemple de code suivant fait partie d’une fonction de rappel EvtIoRead qui obtient un MDL pour la mémoire tampon d’entrée d’une demande d’E/S. Si l’appel à WdfRequestRetrieveOutputWdmMdl échoue, le pilote termine la requête avec l’erreur status que WdfRequestRetrieveOutputWdmMdl retourne.
VOID
MyDrvEvtIoRead(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t Length
)
{
NTSTATUS status;
PMDL mdl = NULL;
...
status = WdfRequestRetrieveOutputWdmMdl(
Request,
&mdl
);
if (!NT_SUCCESS(status))
{
WdfRequestCompleteWithInformation(
Request,
status,
0
);
}
...
}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.0 |
En-tête | wdfrequest.h (include Wdf.h) |
Bibliothèque | Wdf01000.sys (consultez Gestion de version de la bibliothèque d’infrastructure.) |
IRQL | <=DISPATCH_LEVEL |
Règles de conformité DDI | DriverCreate(kmdf),InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf),MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), OutputBufferAPI(kmdf) |