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 una 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 |
---|---|
|
Un parámetro de entrada no es válido. |
|
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. |
|
La solicitud ya se ha completado. |
|
La longitud del búfer de entrada es cero. |
|
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 salida de una solicitud recibe información, como los datos de un disco, que el controlador proporciona al originador 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 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, WdfRequestRetrieveOutputWdmMdl también admite solicitudes de E/S que usan ni búfer nide E/S directa.
Si WdfRequestRetrieveOutputWdmMdl devuelve STATUS_SUCCESS, el controlador recibe un puntero a una 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, vea acceder a búferes de datos en controladores de Framework-Based.
Ejemplos
El ejemplo de código siguiente forma parte de un EvtIoRead función de devolución de llamada 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 WdfRequestRetrieveOutputWdmMdl devuelve.
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 | Valor |
---|---|
de la plataforma de destino de | Universal |
versión mínima de KMDF | 1.0 |
encabezado de | wdfrequest.h (incluya Wdf.h) |
biblioteca de | 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) |