Función WdfRequestRetrieveOutputWdmMdl (wdfrequest.h)

[Solo se aplica a KMDF]

El método WdfRequestRetrieveOutputWdmMdl recupera una lista de descriptores de memoria (MDL) que representa el búfer de salida de una solicitud de E/S.

Sintaxis

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

Parámetros

[in] Request

Identificador de un objeto de solicitud de marco.

[out] Mdl

Puntero a una ubicación que recibe un puntero a un MDL.

Valor devuelto

WdfRequestRetrieveOutputWdmMdl 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_INVALID_DEVICE_REQUEST
El tipo de solicitud no es válido o la solicitud no usa ni E/S almacenada en búfer ni directa. Para obtener más información sobre los métodos admitidos para acceder a los búferes de datos, consulte la sección Comentarios siguientes.
STATUS_INTERNAL_ERROR
La solicitud ya se ha completado.
STATUS_BUFFER_TOO_SMALL
La longitud del búfer de entrada es cero.
STATUS_INSUFFICIENT_RESOURCES
No hay memoria suficiente.
 

Este método también podría devolver otros valores NTSTATUS.

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

Comentarios

El búfer de salida de una solicitud recibe información, como los datos de un disco, que el controlador proporciona al autor de la solicitud. El controlador puede llamar a WdfRequestRetrieveOutputWdmMdl para una solicitud de lectura o una solicitud de control de E/S de dispositivo, pero no para una solicitud de escritura (porque las solicitudes de escritura no proporcionan datos de salida).

El método WdfRequestRetrieveOutputWdmMdl recupera la MDL del búfer de salida para las solicitudes de E/S que usan el método de E/S almacenado en búfer o el método 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, WdfRequestRetrieveOutputWdmMdl también admite solicitudes de E/S que usan ni búfer ni E/S directa.

Si WdfRequestRetrieveOutputWdmMdl devuelve STATUS_SUCCESS, el controlador recibe un puntero a un MDL que describe el búfer de salida.

El controlador no debe acceder a la MDL de una solicitud después de completar la solicitud de E/S.

Para obtener más información sobre WdfRequestRetrieveOutputWdmMdl, consulte Acceso a los búferes de datos en controladores de Framework-Based.

Ejemplos

El siguiente ejemplo de código forma parte de una función de devolución de llamada EvtIoRead que obtiene una MDL para el búfer de entrada de una solicitud de E/S. Si se produce un error en la llamada a WdfRequestRetrieveOutputWdmMdl , el controlador completa la solicitud con el estado de error que devuelve WdfRequestRetrieveOutputWdmMdl .

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

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfrequest.h (incluir Wdf.h)
Library Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI 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)

Consulte también

WdfRequestRetrieveInputWdmMdl