WdfRequestRetrieveInputBuffer-Funktion (wdfrequest.h)
[Gilt für KMDF und UMDF]
Die WdfRequestRetrieveInputBuffer Methode ruft den Eingabepuffer einer E/A-Anforderung ab.
Syntax
NTSTATUS WdfRequestRetrieveInputBuffer(
[in] WDFREQUEST Request,
size_t MinimumRequiredLength,
[out] PVOID *Buffer,
[out, optional] size_t *Length
);
Parameter
[in] Request
Ein Handle zu einem Framework-Anforderungsobjekt.
MinimumRequiredLength
Die minimale Puffergröße in Bytes, die der Treiber für die Verarbeitung der E/A-Anforderung benötigt.
[out] Buffer
Ein Zeiger auf eine Position, die die Adresse des Puffers empfängt.
[out, optional] Length
Ein Zeiger auf eine Position, die die Größe des Puffers in Byte empfängt. Dieser Parameter ist optional und kann NULL-werden.
Rückgabewert
WdfRequestRetrieveInputBuffer 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. |
|
Die Länge des Eingabepuffers ist null, oder die MinimumRequiredSize Parameter gibt eine Puffergröße an, die größer als die tatsächliche Größe des Puffers ist. |
|
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". |
|
Die Anforderung wurde bereits abgeschlossen. |
|
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 Eingabepuffer einer Anforderung enthält Informationen, z. B. Daten, die auf einen Datenträger geschrieben werden sollen, der vom Absender der Anforderung bereitgestellt wurde. Ihr Treiber kann WdfRequestRetrieveInputBuffer- aufrufen, um den Eingabepuffer für eine Schreibanforderung oder eine Geräte-E/A-Steuerelementanforderung abzurufen, aber nicht für eine Leseanforderung (da Leseanforderungen keine Eingabedaten bereitstellen).
Die WdfRequestRetrieveInputBuffer Methode ruft den Eingabepuffer für E/A-Anforderungen ab, die die gepufferten 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 WdfRequestRetrieveInputBuffer auch E/A-Anforderungen, die weder gepuffert noch direkte E/A-verwenden.
Wenn WdfRequestRetrieveInputBuffer STATUS_SUCCESS zurückgibt, empfängt der Treiber die Adresse und optional die Größe des Eingabepuffers.
Der Treiber kann auf den abgerufenen Puffer zugreifen, bis er die E/A-Anforderung abgeschlossen, die der parameter Request darstellt.
Anstatt WdfRequestRetrieveInputBufferaufzurufen, kann der Treiber WdfRequestRetrieveInputMemoryaufrufen, wodurch ein Frameworkspeicherobjekt erstellt wird, das den Puffer darstellt.
Weitere Informationen zu WdfRequestRetrieveInputBufferfinden Sie unter Zugreifen auf Datenpuffer in Framework-Based Drivers.
Beispiele
Das folgende Codebeispiel ist Teil der Serial Beispieltreibers EvtIoDeviceControl Rückruffunktion. Wenn der E/A-Steuerelementcode IOCTL_SERIAL_SET_TIMEOUT ist, ruft der Treiber neue Timeoutwerte aus dem Eingabepuffer der E/A-Anforderung ab.
VOID
SerialEvtIoDeviceControl(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength,
IN ULONG IoControlCode
)
{
PVOID buffer;
size_t bufSize;
switch (IoControlCode) {
...
case IOCTL_SERIAL_SET_TIMEOUTS: {
PSERIAL_TIMEOUTS NewTimeouts;
Status = WdfRequestRetrieveInputBuffer(
Request,
sizeof(SERIAL_TIMEOUTS),
&buffer,
&bufSize
);
if (!NT_SUCCESS(Status)) {
break;
}
NewTimeouts =(PSERIAL_TIMEOUTS)buffer;
}
...
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Header- | wdfrequest.h (include Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL- | <=DISPATCH_LEVEL |
DDI-Complianceregeln | BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedWrite(kmdf) ), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), InputBufferAPI(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |