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
S_OK

FormatRequestForControlTransfer ha formateado correctamente un objeto de solicitud de E/S.

E_OUTOFMEMORY

FormatRequestForControlTransfer encontró un error de asignación.

E_INVALIDARG
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

Consulte también

IWDFIoRequest

IWDFMemory

IWDFUsbTargetDevice

WDFMEMORY_OFFSET