Freigeben über


WdfRequestRetrieveOutputWdmMdl-Funktion (wdfrequest.h)

[Gilt nur für KMDF]

Die WdfRequestRetrieveOutputWdmMdl Methode ruft eine Speicherbeschreibungsliste (MDL) ab, die den Ausgabepuffer einer E/A-Anforderung darstellt.

Syntax

NTSTATUS WdfRequestRetrieveOutputWdmMdl(
  [in]  WDFREQUEST Request,
  [out] PMDL       *Mdl
);

Parameter

[in] Request

Ein Handle zu einem Framework-Anforderungsobjekt.

[out] Mdl

Ein Zeiger auf eine Position, die einen Zeiger auf eine MDL empfängt.

Rückgabewert

WdfRequestRetrieveOutputWdmMdl gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode möglicherweise einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER
Ein Eingabeparameter ist ungültig.
STATUS_INVALID_DEVICE_REQUEST
Der Anforderungstyp ist ungültig, oder die Anforderung verwendet weder gepuffert noch direkte E/A-. Weitere Informationen zu unterstützten Methoden für den Zugriff auf Datenpuffer finden Sie im folgenden Abschnitt "Hinweise".
STATUS_INTERNAL_ERROR
Die Anforderung wurde bereits abgeschlossen.
STATUS_BUFFER_TOO_SMALL
Die Länge des Eingabepuffers ist null.
STATUS_INSUFFICIENT_RESOURCES
Es ist nicht genügend Arbeitsspeicher vorhanden.
 

Diese Methode kann auch andere NTSTATUS-Wertezurückgeben.

Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.

Bemerkungen

Der Ausgabepuffer einer Anforderung empfängt Informationen, z. B. Daten von einem Datenträger, die der Treiber dem Absender der Anforderung bereitstellt. Ihr Treiber kann WdfRequestRetrieveOutputWdmMdl für eine Leseanforderung oder eine Geräte-E/A-Steuerelementanforderung aufrufen, aber nicht für eine Schreibanforderung (da Schreibanforderungen keine Ausgabedaten bereitstellen).

Die WdfRequestRetrieveOutputWdmMdl Methode ruft die MDL des Ausgabepuffers für E/A-Anforderungen ab, die die gepufferte E/ A-Methode oder die direkte E/A--Methode für den Zugriff auf Datenpuffer verwenden. Wenn der E/A-Steuerungscode der Anforderung IRP_MJ_INTERNAL_DEVICE_CONTROList oder die Anforderung von einem anderen Kernelmodustreiber stammt, unterstützt WdfRequestRetrieveOutputWdmMdl auch E/A-Anforderungen, die weder gepuffert noch direkte E/A-verwenden.

Wenn WdfRequestRetrieveOutputWdmMdl STATUS_SUCCESS zurückgibt, empfängt der Treiber einen Zeiger auf eine MDL, die den Ausgabepuffer beschreibt.

Der Treiber darf nicht auf die MDL einer Anforderung zugreifen, nachdem die E/A-Anforderungabgeschlossen hat.

Weitere Informationen zu WdfRequestRetrieveOutputWdmMdlfinden Sie unter Zugreifen auf Datenpuffer in Framework-Based Drivers.

Beispiele

Das folgende Codebeispiel ist Teil einer EvtIoRead- Rückruffunktion, die eine MDL für den Eingabepuffer einer E/A-Anforderung abruft. Wenn der Aufruf von WdfRequestRetrieveOutputWdmMdl fehlschlägt, schließt der Treiber die Anforderung mit dem Fehlerstatus ab, der WdfRequestRetrieveOutputWdmMdl zurückgibt.

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
                                          );
    }
...
}

Anforderungen

Anforderung Wert
Zielplattform- Universal
Minimale KMDF-Version 1.0
Header- wdfrequest.h (include Wdf.h)
Library Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.)
IRQL- <=DISPATCH_LEVEL
DDI-Complianceregeln 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)-

Siehe auch

WdfRequestRetrieveInputWdmMdl