WdfRequestRetrieveOutputWdmMdl-Funktion (wdfrequest.h)
[Gilt nur für KMDF]
Die WdfRequestRetrieveOutputWdmMdl-Methode ruft eine Arbeitsspeicherdeskriptorliste (Memory Descriptor List, MDL) ab, die den Ausgabepuffer einer E/A-Anforderung darstellt.
Syntax
NTSTATUS WdfRequestRetrieveOutputWdmMdl(
[in] WDFREQUEST Request,
[out] PMDL *Mdl
);
Parameter
[in] Request
Ein Handle für ein Frameworkanforderungsobjekt.
[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 |
---|---|
|
Ein Eingabeparameter ist ungültig. |
|
Der Anforderungstyp ist ungültig, oder die Anforderung verwendet weder gepufferte noch direkte E/A. Weitere Informationen zu unterstützten Methoden für den Zugriff auf Datenpuffer finden Sie im folgenden Abschnitt Mit Anmerkungen. |
|
Die Anforderung wurde bereits abgeschlossen. |
|
Die Länge des Eingabepuffers ist 0. |
|
Es ist nicht genügend Arbeitsspeicher vorhanden. |
Diese Methode kann auch andere NTSTATUS-Werte zurückgeben.
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Hinweise
Der Ausgabepuffer einer Anforderung empfängt Informationen, z. B. Daten von einem Datenträger, die der Treiber dem Absender der Anforderung zur Verfügung stellt. Ihr Treiber kann WdfRequestRetrieveOutputWdmMdl für eine Leseanforderung oder eine Geräte-E/A-Steuerungsanforderung aufrufen, aber nicht für eine Schreibanforderung (da Schreibanforderungen keine Ausgabedaten bereitstellen).
Die WdfRequestRetrieveOutputWdmMdl-Methode ruft die MDL für E/A-Anforderungen des Ausgabepuffers 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_CONTROL ist oder die Anforderung von einem anderen Kernelmodustreiber stammt, unterstützt WdfRequestRetrieveOutputWdmMdl auch E/A-Anforderungen, die weder gepufferte noch direkte E/A verwenden.
Wenn WdfRequestRetrieveOutputWdmMdl STATUS_SUCCESS zurückgibt, erhält der Treiber einen Zeiger auf eine MDL, die den Ausgabepuffer beschreibt.
Der Treiber darf nach Abschluss der E/A-Anforderung nicht auf die MDL einer Anforderung zugreifen.
Weitere Informationen zu WdfRequestRetrieveOutputWdmMdl finden Sie unter Zugreifen auf Datenpuffer in Framework-Based Treibern.
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 Fehler status ab, den 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 | Universell |
KMDF-Mindestversion | 1.0 |
Kopfzeile | wdfrequest.h (einschließen von Wdf.h) |
Bibliothek | Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.) |
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) |