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 |