WdfRequestRetrieveInputWdmMdl-Funktion (wdfrequest.h)
[Gilt nur für KMDF]
Die WdfRequestRetrieveInputWdmMdl-Methode ruft eine Speicherdeskriptorliste (Memory Descriptor List, MDL) ab, die den Eingabepuffer einer E/A-Anforderung darstellt.
Syntax
NTSTATUS WdfRequestRetrieveInputWdmMdl(
[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
WdfRequestRetrieveInputWdmMdl 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-Vorgänge. Weitere Informationen zu unterstützten Methoden für den Zugriff auf Datenpuffer finden Sie im folgenden Abschnitt hinweise. |
|
Die Anforderung wurde bereits abgeschlossen. |
|
Die Länge des Eingabepuffers ist null. |
|
Es ist nicht genügend Arbeitsspeicher vorhanden. |
Diese Methode gibt möglicherweise auch andere NTSTATUS-Werte zurück.
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Hinweise
Der Eingabepuffer einer Anforderung enthält Informationen, z. B. Daten, die auf einen Datenträger geschrieben werden sollen, die vom Absender der Anforderung bereitgestellt wurden. Ihr Treiber kann WdfRequestRetrieveInputWdmMdl für eine Schreibanforderung oder eine Geräte-E/A-Steuerungsanforderung aufrufen, aber nicht für eine Leseanforderung (da Leseanforderungen keine Eingabedaten bereitstellen).
Die WdfRequestRetrieveInputWdmMdl-Methode ruft die MDL des Eingabepuffers 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_CONTROL ist oder die Anforderung von einem anderen Kernelmodustreiber stammt, unterstützt WdfRequestRetrieveInputWdmMdl auch E/A-Anforderungen, die weder gepuffert noch direkte E/A verwenden.
Wenn WdfRequestRetrieveInputWdmMdl STATUS_SUCCESS zurückgibt, erhält der Treiber einen Zeiger auf eine MDL, die den Eingabepuffer beschreibt.
Der Treiber darf nach Abschluss der E/A-Anforderung nicht auf die MDL einer Anforderung zugreifen.
Weitere Informationen zu WdfRequestRetrieveInputWdmMdl finden Sie unter Zugreifen auf Datenpuffer in Framework-Based Treibern.
Beispiele
Das folgende Codebeispiel ist Teil einer EvtIoWrite-Rückruffunktion , die eine MDL für den Eingabepuffer einer E/A-Anforderung abruft. Wenn der Aufruf von WdfRequestRetrieveInputWdmMdl fehlschlägt, schließt der Treiber die Anforderung mit dem Fehler ab, status, den WdfRequestRetrieveInputWdmMdl zurückgibt.
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
);
}
...
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
Kopfzeile | wdfrequest.h (include Wdf.h) |
Bibliothek | Wdf01000.sys (siehe Versionsverwaltung der Frameworkbibliothek).) |
IRQL | <=DISPATCH_LEVEL |
DDI-Complianceregeln | 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) |