Método IWDFUsbTargetDevice::FormatRequestForControlTransfer (wudfusb.h)
[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.
El método FormatRequestForControlTransfer da formato a un objeto de solicitud de E/S para una transferencia de control USB.
Sintaxis
HRESULT FormatRequestForControlTransfer(
[in] IWDFIoRequest *pRequest,
[in] PWINUSB_SETUP_PACKET SetupPacket,
[in, optional] IWDFMemory *pMemory,
[in, optional] PWDFMEMORY_OFFSET TransferOffset
);
Parámetros
[in] pRequest
Puntero a la interfaz IWDFIoRequest para que el objeto de solicitud dé formato.
[in] SetupPacket
Puntero a un WINUSB_SETUP_PACKET para la transferencia de controles.
[in, optional] pMemory
Puntero a la interfaz IWDFMemory que se usa para acceder al búfer que se usa para la transferencia de control. Este parámetro es opcional.
[in, optional] TransferOffset
Puntero a una estructura WDFMEMORY_OFFSET que describe el desplazamiento de memoria que se usa para la transferencia de control. Este parámetro es opcional.
Valor devuelto
FormatRequestForControlTransfer devuelve uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
|
FormatRequestForControlTransfer ha formateado correctamente un objeto de solicitud de E/S. |
|
FormatRequestForControlTransfer encontró un error de asignación. |
|
Desplazamiento de memoria que el parámetro TransferOffset especificó no era válido. |
Comentarios
Después de que un controlador UMDF llame a FormatRequestForControlTransfer para dar formato a una solicitud de E/S para una operación de transferencia de control, el marco puede enviar posteriormente la solicitud al destino de E/S.
Ejemplos
El ejemplo de código siguiente se toma del ejemplo de wdf_osrfx2_lab en el 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 | Value |
---|---|
Finalización del soporte técnico | No disponible en UMDF 2.0 y versiones posteriores. |
Plataforma de destino | Escritorio |
Versión mínima de UMDF | 1.5 |
Encabezado | wudfusb.h (incluya Wudfusb.h) |
Archivo DLL | WUDFx.dll |