Partager via


WdfRequestRetrieveInputWdmMdl, fonction (wdfrequest.h)

[S’applique uniquement à KMDF]

La méthode WdfRequestRetrieveInputWdmMdl récupère une liste de descripteurs mémoire (MDL) qui représente la mémoire tampon d’entrée d’une demande d’E/S.

Syntaxe

NTSTATUS WdfRequestRetrieveInputWdmMdl(
  [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

WdfRequestRetrieveInputWdmMdl retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Code de retour Description
STATUS_INVALID_PARAMETER
Un paramètre d’entrée n’est pas valide.
STATUS_INVALID_DEVICE_REQUEST
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.
STATUS_INTERNAL_ERROR
La demande a déjà été effectuée.
STATUS_BUFFER_TOO_SMALL
La longueur de la mémoire tampon d’entrée est égale à zéro.
STATUS_INSUFFICIENT_RESOURCES
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 d’entrée d’une requête contient des informations, telles que les données à écrire sur un disque, qui ont été fournies par l’initiateur de la demande. Votre pilote peut appeler WdfRequestRetrieveInputWdmMdl pour une demande d’écriture ou une demande de contrôle d’E/S d’appareil, mais pas pour une demande de lecture (car les demandes de lecture ne fournissent pas de données d’entrée).

La méthode WdfRequestRetrieveInputWdmMdl récupère la MDL de la mémoire tampon d’entrée 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, WdfRequestRetrieveInputWdmMdl prend également en charge les demandes d’E/S qui n’utilisent ni mémoire tampon ni E/S directes.

Si WdfRequestRetrieveInputWdmMdl retourne STATUS_SUCCESS, le pilote reçoit un pointeur vers un MDL qui décrit la mémoire tampon d’entrée.

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 WdfRequestRetrieveInputWdmMdl, 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 EvtIoWrite qui obtient un MDL pour la mémoire tampon d’entrée d’une demande d’E/S. Si l’appel à WdfRequestRetrieveInputWdmMdl échoue, le pilote termine la demande avec l’erreur status que WdfRequestRetrieveInputWdmMdl retourne.

VOID 
MyDrvEvtIoWrite(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request,
    IN size_t  Length
    )
{
    NTSTATUS  status;
    PMDL  mdl = NULL;

...
    status = WdfRequestRetrieveInputWdmMdl(
                                           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),InputBufferAPI(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf),MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedWrite(kmdf) , MdlAfterReqCompletedWriteA(kmdf)

Voir aussi

WdfRequestRetrieveOutputWdmMdl