IWDFUsbTargetDevice::FormatRequestForControlTransfer 方法 (wudfusb.h)
[警告: UMDF 2 是最新版本的 UMDF,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]
FormatRequestForControlTransfer 方法为 USB 控制传输设置 I/O 请求对象的格式。
语法
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 已成功格式化 I/O 请求对象。 |
|
FormatRequestForControlTransfer 遇到分配失败。 |
|
指定的 TransferOffset 参数无效的内存偏移量。 |
注解
在 UMDF 驱动程序调用 FormatRequestForControlTransfer 以设置控制传输操作的 I/O 请求的格式后,框架随后可以将请求发送到 I/O 目标。
示例
以下代码示例取自 WDK 中的 wdf_osrfx2_lab 示例。
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 |