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


Метод IWDFUsbTargetDevice::FormatRequestForControlTransfer (wudfusb.h)

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

Метод FormatRequestForControlTransfer форматирует объект запроса ввода-вывода для передачи элемента управления USB.

Синтаксис

HRESULT FormatRequestForControlTransfer(
  [in]           IWDFIoRequest        *pRequest,
  [in]           PWINUSB_SETUP_PACKET SetupPacket,
  [in, optional] IWDFMemory           *pMemory,
  [in, optional] PWDFMEMORY_OFFSET    TransferOffset
);

Параметры

[in] pRequest

Указатель на интерфейс IWDFIoRequest для отформатируемого объекта запроса.

[in] SetupPacket

Указатель на WINUSB_SETUP_PACKET для передачи элемента управления.

[in, optional] pMemory

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

[in, optional] TransferOffset

Указатель на структуру WDFMEMORY_OFFSET , описывающую смещение памяти, используемое для передачи элемента управления. Этот параметр является необязательным.

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

FormatRequestForControlTransfer возвращает одно из следующих значений:

Код возврата Описание
S_OK

FormatRequestForControlTransfer успешно отформатирован объект запроса ввода-вывода.

E_OUTOFMEMORY

В FormatRequestForControlTransfer произошла ошибка выделения.

E_INVALIDARG
Недопустимое смещение памяти, указанное параметром TransferOffset .

Комментарии

После того как драйвер UMDF вызывает FormatRequestForControlTransfer для форматирования запроса ввода-вывода для операции передачи элемента управления, платформа может впоследствии отправить запрос целевому объекту ввода-вывода.

Примеры

Следующий пример кода взят из примера wdf_osrfx2_lab в WDK.

    WINUSB_CONTROL_SETUP_PACKET setupPacket;

    ULONG bytesTransferred;

    HRESULT hr = S_OK;

    //
    // Setup the control packet.
    //

    WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
                                      BmRequestHostToDevice,
                                      BmRequestToDevice,
                                      USBFX2LK_SET_BARGRAPH_DISPLAY,
                                      0,
                                      0 );

    //
    // Issue the request to WinUsb.
    //

    hr = SendControlTransferSynchronously(
                &(setupPacket.WinUsb),
                (PUCHAR) BarGraphState,
                sizeof(BAR_GRAPH_STATE),
                &bytesTransferred
                );
...

HRESULT
CMyDevice::SendControlTransferSynchronously(
    _In_ PWINUSB_SETUP_PACKET SetupPacket,
    _Inout_updates_(BufferLength) PBYTE Buffer,
    _In_ ULONG BufferLength,
    _Out_ PULONG LengthTransferred
    )
{
    HRESULT hr = S_OK;
    IWDFIoRequest *pWdfRequest = NULL;
    IWDFDriver * FxDriver = NULL;
    IWDFMemory * FxMemory = NULL; 
    IWDFRequestCompletionParams * FxComplParams = NULL;
    IWDFUsbRequestCompletionParams * FxUsbComplParams = NULL;

    *LengthTransferred = 0;
    
    hr = m_FxDevice->CreateRequest( NULL, //pCallbackInterface
                                    NULL, //pParentObject
                                    &pWdfRequest);

    if (SUCCEEDED(hr))
    {
        m_FxDevice->GetDriver(&FxDriver);

        hr = FxDriver->CreatePreallocatedWdfMemory( Buffer,
                                                    BufferLength,
                                                    NULL, //pCallbackInterface
                                                    pWdfRequest, //pParetObject
                                                    &FxMemory );
    }

    if (SUCCEEDED(hr))
    {
        hr = m_pIUsbTargetDevice->FormatRequestForControlTransfer( pWdfRequest,
                                                                   SetupPacket,
                                                                   FxMemory,
                                                                   NULL); //TransferOffset
    }                                                          
      

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.5
Верхняя часть wudfusb.h (включая Wudfusb.h)
DLL WUDFx.dll

См. также раздел

IWDFIoRequest

IWDFMemory

IWDFUsbTargetDevice

WDFMEMORY_OFFSET