Método IWDFUsbTargetDevice::FormatRequestForControlTransfer (wudfusb.h)
[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Drivers universais do Windows devem usar UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]
O método FormatRequestForControlTransfer formata um objeto de solicitação de E/S para uma transferência de controle USB.
Sintaxe
HRESULT FormatRequestForControlTransfer(
[in] IWDFIoRequest *pRequest,
[in] PWINUSB_SETUP_PACKET SetupPacket,
[in, optional] IWDFMemory *pMemory,
[in, optional] PWDFMEMORY_OFFSET TransferOffset
);
Parâmetros
[in] pRequest
Um ponteiro para a interface IWDFIoRequest para o objeto de solicitação formatar.
[in] SetupPacket
Um ponteiro para um WINUSB_SETUP_PACKET para a transferência de controle.
[in, optional] pMemory
Um ponteiro para a interface IWDFMemory usada para acessar o buffer usado para a transferência de controle. Esse parâmetro é opcional.
[in, optional] TransferOffset
Um ponteiro para uma estrutura WDFMEMORY_OFFSET que descreve o deslocamento de memória usado para a transferência de controle. Esse parâmetro é opcional.
Retornar valor
FormatRequestForControlTransfer retorna um dos seguintes valores:
Código de retorno | Descrição |
---|---|
|
FormatRequestForControlTransfer formatou com êxito um objeto de solicitação de E/S. |
|
FormatRequestForControlTransfer encontrou uma falha de alocação. |
|
O deslocamento de memória especificado pelo parâmetro TransferOffset era inválido. |
Comentários
Depois que um driver UMDF chama FormatRequestForControlTransfer para formatar uma solicitação de E/S para uma operação de transferência de controle, a estrutura pode enviar posteriormente a solicitação para o destino de E/S.
Exemplos
O exemplo de código a seguir é obtido do exemplo de wdf_osrfx2_lab no 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
}
Requisitos
Requisito | Valor |
---|---|
Fim do suporte | Indisponível no UMDF 2.0 e posterior. |
Plataforma de Destino | Área de Trabalho |
Versão mínima do UMDF | 1.5 |
Cabeçalho | wudfusb.h (include Wudfusb.h) |
DLL | WUDFx.dll |