Método IWDFIoRequest2::RetrieveInputMemory (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 RetrieveInputMemory recupera la interfaz IWDFMemory de un objeto de memoria de marco que representa el búfer de entrada de una solicitud de E/S.

Sintaxis

HRESULT RetrieveInputMemory(
  [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

RetrieveInputMemory 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
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
La solicitud de E/S no proporcionó un búfer de salida.
E_OUTOFMEMORY
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 puede devolver uno de los otros valores que contiene Winerror.h.

Comentarios

El búfer de entrada de una solicitud contiene información, como los datos que se van a escribir en un disco, que el autor de la solicitud proporcionó. El controlador puede llamar a RetrieveInputMemory para obtener el búfer de entrada de 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 RetrieveInputMemory recupera el búfer de entrada para las solicitudes de E/S que usan el método de E /S almacenado en búfer o E/S directa para acceder a los búferes de datos.

Si RetrieveInputMemory devuelve S_OK, el controlador recibe un puntero a la interfaz IWDFMemory de un objeto de memoria UMDF que representa el búfer de entrada. 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 RetrieveInputMemory, el controlador puede llamar a IWDFIoRequest2::RetrieveInputBuffer, 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 UMDF-Based controladores.

Ejemplos

En el ejemplo de código siguiente se muestra cómo una función de devolución de llamada IQueueCallbackWrite::OnWrite puede obtener la interfaz IWDFMemory del objeto de memoria del marco que representa el búfer de entrada de una solicitud de escritura. A continuación, el ejemplo da formato y envía la solicitud de escritura a un destino de E/S USB.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnWrite(
    __in IWDFIoQueue *pWdfQueue,
    __in IWDFIoRequest *pWdfRequest,
    __in SIZE_T BytesToWrite
    )
{
    HRESULT hr = S_OK;
    IWDFMemory * pInputMemory = NULL;
    IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    hr = r2->RetrieveInputMemory(&pInputMemory);
    if (FAILED(hr)) goto Exit;

    hr = pOutputPipe->FormatRequestForWrite(
                                           pWdfRequest,
                                           NULL, //pFile
                                           pInputMemory,
                                           NULL, //Memory offset
                                           NULL  //DeviceOffset
                                           );
Exit:
    if (FAILED(hr))
    {
        pWdfRequest->Complete(hr);
    }
    else
    {
        ForwardFormattedRequest(pWdfRequest, pOutputPipe);
    }
    SAFE_RELEASE(pInputMemory);
 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

IWDFIoRequest2::RetrieveInputBuffer

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory