Поделиться через


Метод IWDFIoRequest2::RetrieveInputBuffer (wudfddi.h)

[ предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе Начало работы с UMDF.]

Метод RequestRetrieveInputBuffer извлекает входной буфер запроса ввода-вывода.

Синтаксис

HRESULT RetrieveInputBuffer(
  [in]            SIZE_T MinimumRequiredCb,
  [out]           PVOID  *Buffer,
  [out, optional] SIZE_T *BufferCb
);

Параметры

[in] MinimumRequiredCb

Минимальный размер буфера в байтах, который драйвер должен обработать запрос ввода-вывода. Это значение может быть равно нулю, если не существует минимального размера буфера.

[out] Buffer

Указатель на расположение, которое получает адрес буфера.

[out, optional] BufferCb

Указатель на расположение, которое получает размер буфера в байтах. Этот параметр является необязательным и может быть null.

Возвращаемое значение

RequestRetrieveInputBuffer возвращает S_OK, если операция выполнена успешно. В противном случае этот метод может вернуть следующее значение:

Возвращаемый код Описание
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
Запрос ввода-вывода не предоставил входной буфер или размер входного буфера меньше минимального размера, который MinimumRequiredCb.
E_OUTOFMEMORY
Недостаточно памяти для получения буфера. Драйвер должен завершить запрос со значением состояния ошибки.
 

Этот метод может возвращать одно из других значений, содержащихся в Winerror.h.

Замечания

Входной буфер запроса содержит сведения, такие как данные, записываемые на диск, что источник предоставленного запроса. Драйвер может вызывать RequestRetrieveInputBuffer для получения входного буфера для запроса на запись или запроса элемента управления ввода-вывода устройства, но не для запроса на чтение (так как запросы на чтение не предоставляют входные данные).

Метод RequestRetrieveInputBuffer извлекает входной буфер для запросов ввода-вывода, использующих буферизованные операции ввода-вывода или прямой метод ввода-вывода для доступа к буферам данных.

Если RequestRetrieveInputBuffer возвращает S_OK, драйвер получает адрес и, при необходимости, размер входного буфера.

Драйвер может получить доступ к полученному буферу, пока он не завершит запрос ввода-вывода.

Вместо вызова requestRetrieveInputBuffer драйвер может вызывать IWDFIoRequest2::RetrieveInputMemory, который создает объект памяти платформы, представляющий буфер.

Дополнительные сведения о доступе к буферам данных запроса ввода-вывода см. в доступ к буферам данных в UMDF-Based драйверах.

Примеры

В следующем примере кода показан сегмент драйвера последовательного порта IQueueCallbackDeviceIoControl::OnDeviceIoControl функции обратного вызова. Из входного буфера запроса ввода-вывода сегмент кода получает скорость ввода-вывода, которая должна быть задана для устройства.

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);
...
        }
    }
}

Требования

Требование Ценность
завершение поддержки Недоступно в UMDF 2.0 и более поздних версиях.
целевая платформа Настольный
минимальная версия UMDF 1.9
заголовка wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

См. также

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory