Método IWDFIoRequest2::RetrieveInputBuffer (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 RequestRetrieveInputBuffer recupera el búfer de entrada de una solicitud de E/S.
Sintaxis
HRESULT RetrieveInputBuffer(
[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 necesita para 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 puede ser NULL.
Valor devuelto
RequestRetrieveInputBuffer 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 o el tamaño del búfer de entrada es menor que el tamaño mínimo que especifica MinimumRequiredCb . |
|
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 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 RequestRetrieveInputBuffer 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 RequestRetrieveInputBuffer recupera el búfer de entrada para 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 RequestRetrieveInputBuffer devuelve S_OK, el controlador recibe la dirección y, opcionalmente, el tamaño del búfer de entrada.
El controlador puede acceder al búfer recuperado hasta que complete la solicitud de E/S.
En lugar de llamar a RequestRetrieveInputBuffer, el controlador puede llamar a IWDFIoRequest2::RetrieveInputMemory, 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 Acceso a los búferes de datos en controladores de UMDF-Based.
Ejemplos
En el ejemplo de código siguiente se muestra un segmento de la función de devolución de llamada IQueueCallbackDeviceIoControl::OnDeviceIoControl del controlador de puerto serie. Desde el búfer de entrada de una solicitud de E/S, el segmento de código obtiene la velocidad de baudios que se debe establecer para el dispositivo.
VOID
STDMETHODCALLTYPE
CMyQueue::OnDeviceIoControl(
__in IWDFIoQueue* FxQueue,
__in IWDFIoRequest* FxRequest,
__in ULONG ControlCode,
__in SIZE_T InputBufferCb,
__in SIZE_T OutputBufferCb
)
{
PBYTE buffer;
SIZE_T bufferSize;
HRESULT hr;
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = FxRequest;
switch (ControlCode)
{
case IOCTL_SERIAL_SET_BAUD_RATE:
{
//
// Obtain the baud rate from the write request's input buffer.
//
hr = r2->RetrieveInputBuffer(sizeof(SERIAL_BAUD_RATE),
(PVOID*) &buffer,
&bufferSize);
...
}
}
}
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::RetrieveInputMemory
IWDFIoRequest2::RetrieveOutputBuffer