Método IWDFIoRequest2::RetrieveOutputMemory (wudfddi.h)
[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.
El método RetrieveOutputMemory recupera la interfaz IWDFMemory de un objeto de memoria de marco que representa el búfer de salida de una solicitud de E/S.
Sintaxis
HRESULT RetrieveOutputMemory(
[out] IWDFMemory **Memory
);
Parámetros
[out] Memory
Dirección de una ubicación que recibe un puntero a la interfaz IWDFMemory de un objeto de memoria UMDF.
Valor devuelto
RetrieveOutputMemory devuelve S_OK si la operación se realiza correctamente. De lo contrario, este método puede devolver el siguiente valor:
Código devuelto | Descripción |
---|---|
|
La solicitud de E/S no proporcionó un búfer de entrada. |
|
No hay suficiente memoria disponible para recuperar el búfer. El controlador debe completar la solicitud con un valor de estado de error. |
Este método podría devolver uno de los otros valores que contiene Winerror.h.
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 RetrieveOutputMemory para obtener el búfer de salida de 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 RetrieveOutputMemory recupera el búfer de salida de las solicitudes de E/S que usan la E/S almacenada en búfer o el método de E/S directa para acceder a los búferes de datos.
Si RetrieveOutputMemory devuelve S_OK, el controlador recibe un puntero a la interfaz IWDFMemory de un objeto de memoria UMDF que representa el búfer de salida. Para acceder al búfer, el controlador debe llamar a IWDFMemory::GetDataBuffer.
El controlador puede acceder al objeto de memoria del marco recuperado hasta que complete la solicitud de E/S. Antes de que el controlador complete la solicitud de E/S, debe llamar a IWDFMemory::Release.
En lugar de llamar a RetrieveOutputMemory, el controlador puede llamar a IWDFIoRequest2::RetrieveOutputBuffer, que recupera la dirección y la longitud del búfer.
Para obtener más información sobre el acceso a los búferes de datos de una solicitud de E/S, consulte Acceso a los búferes de datos en controladores de UMDF-Based.
Ejemplos
En el ejemplo de código siguiente se muestra cómo una función de devolución de llamada IQueueCallbackRead::OnRead puede obtener la interfaz IWDFMemory del objeto de memoria del marco que representa el búfer de salida de una solicitud de lectura. A continuación, el ejemplo da formato y envía la solicitud de lectura a un destino de E/S USB.
VOID
STDMETHODCALLTYPE
CMyQueue::OnRead(
__in IWDFIoQueue *pWdfQueue,
__in IWDFIoRequest *pWdfRequest,
__in SIZE_T BytesToRead
)
{
HRESULT hr = S_OK;
IWDFMemory * pOutputMemory = NULL;
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;
r2->RetrieveOutputMemory(&pOutputMemory);
if (FAILED(hr)) goto Exit;
hr = m_Device->GetInputPipe()->FormatRequestForRead(pWdfRequest,
NULL,
pOutputMemory,
NULL,
NULL);
Exit:
if (FAILED(hr))
{
pWdfRequest->Complete(hr);
}
else
{
ForwardFormattedRequest(pWdfRequest, m_Device->GetInputPipe());
}
SAFE_RELEASE(pOutputMemory);
return;
}
Requisitos
Requisito | Value |
---|---|
Finalización del soporte técnico | No disponible en UMDF 2.0 y versiones posteriores. |
Plataforma de destino | Escritorio |
Versión mínima de UMDF | 1,9 |
Encabezado | wudfddi.h (incluya Wudfddi.h) |
Archivo DLL | WUDFx.dll |
Consulte también
IWDFIoRequest2::RetrieveInputBuffer
IWDFIoRequest2::RetrieveInputMemory