Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[ предупреждение: 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 возвращает одно из следующих значений:
| Возвращаемый код | Описание |
|---|---|
|
FormatRequestForControlTransfer успешно отформатирован объект запроса ввода-вывода. |
|
FormatRequestForControlTransfer возникла ошибка выделения. |
|
Смещение памяти, указанное параметром 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 (include Wudfusb.h) |
| DLL | WUDFx.dll |