Método IWDFIoRequest2::RetrieveOutputBuffer (wudfddi.h)
[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los nuevos controladores UMDF deben escribirse mediante 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 a UMDF.]
El método requestRetrieveOutputBuffer de recupera el búfer de salida de una solicitud de E/S.
Sintaxis
HRESULT RetrieveOutputBuffer(
[in] SIZE_T MinimumRequiredCb,
[out] PVOID *Buffer,
[out, optional] SIZE_T *BufferCb
);
Parámetros
[in] MinimumRequiredCb
Tamaño mínimo del búfer, en bytes, que el controlador debe procesar la solicitud de E/S. Este valor puede ser cero si no hay ningún tamaño mínimo de búfer.
[out] Buffer
Puntero a una ubicación que recibe la dirección del búfer.
[out, optional] BufferCb
Puntero a una ubicación que recibe el tamaño del búfer, en bytes. Este parámetro es opcional y se puede NULL.
Valor devuelto
requestRetrieveOutputBuffer 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 salida o el tamaño del búfer de salida es menor que el tamaño mínimo que MinimumRequiredCb especifica. |
|
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.
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 RequestRetrieveOutputBuffer 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 requestRetrieveOutputBuffer de recupera el búfer de salida para las solicitudes de E/S que usan el de E/S almacenado en búfer de o de E/S directa para acceder a los búferes de datos.
Si requestRetrieveOutputBuffer devuelve S_OK, el controlador recibe la dirección y, opcionalmente, el tamaño del búfer de salida.
El controlador puede acceder al búfer recuperado hasta que complete la solicitud de E/S.
En lugar de llamar a RequestRetrieveOutputBuffer, el controlador puede llamar a IWDFIoRequest2::RetrieveOutputMemory, que crea un objeto de memoria de marco que representa el búfer.
Para obtener más información sobre el acceso a los búferes de datos de una solicitud de E/S, consulte acceder a búferes de datos en controladores de UMDF-Based.
Ejemplos
En el ejemplo de código siguiente se muestra un segmento de la IQueueCallbackDeviceIoControl::OnDeviceIoControl función de devolución de llamada. El segmento de código obtiene el búfer de salida de la solicitud de E/S y, a continuación, transfiere la información de velocidad de baudios del dispositivo al búfer.
VOID
STDMETHODCALLTYPE
CMyQueue::OnDeviceIoControl(
__in IWDFIoQueue *pWdfQueue,
__in IWDFIoRequest *pWdfRequest,
__in ULONG ControlCode,
__in SIZE_T InputBufferSizeInBytes,
__in SIZE_T OutputBufferSizeInBytes
)
{
HRESULT hr;
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;
switch (ControlCode)
{
case IOCTL_SERIAL_GET_BAUD_RATE:
{
SERIAL_BAUD_RATE *pBaudRateBuffer;
hr = pWdfRequest2->RetrieveOutputBuffer(sizeof(SERIAL_BAUD_RATE),
(PVOID*) &pBaudRateBuffer,
NULL);
if (SUCCEEDED(hr))
{
RtlZeroMemory(pBaudRateBuffer, sizeof(SERIAL_BAUD_RATE));
pBaudRateBuffer->BaudRate = m_Device->GetBaudRate();
reqCompletionInfo = sizeof(SERIAL_BAUD_RATE);
}
}
break;
...
}
...
}
Requisitos
Requisito | Valor |
---|---|
fin del soporte técnico | No disponible en UMDF 2.0 y versiones posteriores. |
de la plataforma de destino de | Escritorio |
versión mínima de UMDF | 1.9 |
encabezado de | wudfddi.h (incluya Wudfddi.h) |
DLL de | WUDFx.dll |
Consulte también
IWDFIoRequest2::RetrieveInputBuffer
IWDFIoRequest2::RetrieveInputMemory