Función WdfRequestRetrieveInputWdmMdl (wdfrequest.h)
[Solo se aplica a KMDF]
El método WdfRequestRetrieveInputWdmMdl recupera una lista de descriptores de memoria (MDL) que representa el búfer de entrada de una solicitud de E/S.
Sintaxis
NTSTATUS WdfRequestRetrieveInputWdmMdl(
[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
WdfRequestRetrieveInputWdmMdl 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 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 siguiente. |
|
La solicitud ya se ha completado. |
|
La longitud del búfer de entrada es cero. |
|
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 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 WdfRequestRetrieveInputWdmMdl para una solicitud de escritura o una solicitud de control de E/S de dispositivo, pero no para una solicitud de lectura (porque las solicitudes de lectura no proporcionan datos de entrada).
El método WdfRequestRetrieveInputWdmMdl recupera la MDL del búfer de entrada 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 directo 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, WdfRequestRetrieveInputWdmMdl también admite solicitudes de E/S que no usan ni E/S almacenadas en búfer ni E/S directas.
Si WdfRequestRetrieveInputWdmMdl devuelve STATUS_SUCCESS, el controlador recibe un puntero a un MDL que describe el búfer de entrada.
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 WdfRequestRetrieveInputWdmMdl, consulte Acceso a búferes de datos en controladores de Framework-Based.
Ejemplos
El ejemplo de código siguiente forma parte de una función de devolución de llamada EvtIoWrite 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 WdfRequestRetrieveInputWdmMdl , el controlador completa la solicitud con el estado de error que devuelve WdfRequestRetrieveInputWdmMdl .
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
);
}
...
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Encabezado | wdfrequest.h (incluya Wdf.h) |
Library | Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos). |
IRQL | <=DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | 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) |