Compartir a través de


Función WdfRequestRetrieveInputBuffer (wdfrequest.h)

[Se aplica a KMDF y UMDF]

El método WdfRequestRetrieveInputBuffer recupera el búfer de entrada de una solicitud de E/S.

Sintaxis

NTSTATUS WdfRequestRetrieveInputBuffer(
  [in]            WDFREQUEST Request,
                  size_t     MinimumRequiredLength,
  [out]           PVOID      *Buffer,
  [out, optional] size_t     *Length
);

Parámetros

[in] Request

Identificador de un objeto de solicitud de marco.

MinimumRequiredLength

Tamaño mínimo del búfer, en bytes, que el controlador debe procesar la solicitud de E/S.

[out] Buffer

Puntero a una ubicación que recibe la dirección del búfer.

[out, optional] Length

Puntero a una ubicación que recibe el tamaño del búfer, en bytes. Este parámetro es opcional y se puede NULL.

Valor devuelto

WdfRequestRetrieveInputBuffer devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:

Código devuelto Descripción
STATUS_INVALID_PARAMETER
Un parámetro de entrada no es válido.
STATUS_BUFFER_TOO_SMALL
La longitud del búfer de entrada es cero o el parámetro MinimumRequiredSize especifica un tamaño de búfer mayor que el tamaño real del búfer.
STATUS_INVALID_DEVICE_REQUEST
El tipo de solicitud no es válido o la solicitud usa ni búfer nide E/S directa. Para obtener más información sobre los métodos admitidos para acceder a los búferes de datos, consulte la siguiente sección Comentarios.
STATUS_INTERNAL_ERROR
La solicitud ya se ha completado.
STATUS_INSUFFICIENT_RESOURCES
No hay memoria suficiente.
 

Este método también puede devolver otros valores de NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Observaciones

El búfer de entrada de una solicitud contiene información, como los datos que se van a escribir en un disco, proporcionados por el originador de la solicitud. El controlador puede llamar a WdfRequestRetrieveInputBuffer para obtener el búfer de entrada para una solicitud de escritura o una solicitud de control de E/S del dispositivo, pero no para una solicitud de lectura (porque las solicitudes de lectura no proporcionan datos de entrada).

El método WdfRequestRetrieveInputBuffer recupera el búfer de entrada para las solicitudes de E/S que usan el método de E/S almacenado en búfer de o el método de de E/S directa para acceder a los búferes de datos. Si el código de control de E/S de la solicitud es IRP_MJ_INTERNAL_DEVICE_CONTROL, o si la solicitud procede de otro controlador en modo kernel, WdfRequestRetrieveInputBuffer también admite solicitudes de E/S que usan ni búfer nide E/S directa.

Si WdfRequestRetrieveInputBuffer devuelve STATUS_SUCCESS, el controlador recibe la dirección y, opcionalmente, el tamaño del búfer de entrada.

El controlador puede acceder al búfer recuperado hasta que complete la solicitud de E/S que representa el parámetro request de.

En lugar de llamar a WdfRequestRetrieveInputBuffer, el controlador puede llamar a WdfRequestRetrieveInputMemory, que crea un objeto de memoria de marco que representa el búfer.

Para obtener más información acerca de WdfRequestRetrieveInputBuffer, vea Accessing Data Buffers in Framework-Based Drivers.

Ejemplos

El ejemplo de código siguiente forma parte de la serie controlador de ejemplo EvtIoDeviceControl función de devolución de llamada. Si el código de control de E/S es IOCTL_SERIAL_SET_TIMEOUT, el controlador obtiene nuevos valores de tiempo de espera del búfer de entrada de la solicitud de E/S.

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

Requisitos

Requisito Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.0
versión mínima de UMDF 2.0
encabezado de wdfrequest.h (incluya Wdf.h)
biblioteca de Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
irQL <=DISPATCH_LEVEL
reglas de cumplimiento de DDI 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)

Consulte también

WdfRequestRetrieveInputMemory

WdfRequestRetrieveOutputBuffer

WdfUsbTargetDeviceRetrieveConfigDescriptor