Freigeben über


IWDFUsbTargetDevice::FormatRequestForControlTransfer-Methode (wudfusb.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]

Die FormatRequestForControlTransfer-Methode formatiert ein E/A-Anforderungsobjekt für eine USB-Steuerungsübertragung.

Syntax

HRESULT FormatRequestForControlTransfer(
  [in]           IWDFIoRequest        *pRequest,
  [in]           PWINUSB_SETUP_PACKET SetupPacket,
  [in, optional] IWDFMemory           *pMemory,
  [in, optional] PWDFMEMORY_OFFSET    TransferOffset
);

Parameter

[in] pRequest

Ein Zeiger auf die IWDFIoRequest-Schnittstelle für das zu formatierende Anforderungsobjekt.

[in] SetupPacket

Ein Zeiger auf eine WINUSB_SETUP_PACKET für die Steuerungsübertragung.

[in, optional] pMemory

Ein Zeiger auf die IWDFMemory-Schnittstelle , die für den Zugriff auf den Puffer verwendet wird, der für die Steuerungsübertragung verwendet wird. Dieser Parameter ist optional.

[in, optional] TransferOffset

Ein Zeiger auf eine WDFMEMORY_OFFSET-Struktur , die den Speicheroffset beschreibt, der für die Steuerungsübertragung verwendet wird. Dieser Parameter ist optional.

Rückgabewert

FormatRequestForControlTransfer gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK

FormatRequestForControlTransfer hat ein E/A-Anforderungsobjekt erfolgreich formatiert.

E_OUTOFMEMORY

Bei FormatRequestForControlTransfer ist ein Zuordnungsfehler aufgetreten.

E_INVALIDARG
Der Speicheroffset, den der TransferOffset-Parameter angegeben hat, war ungültig.

Hinweise

Nachdem ein UMDF-Treiber FormatRequestForControlTransfer aufgerufen hat, um eine E/A-Anforderung für einen Steuerungsübertragungsvorgang zu formatieren, kann das Framework die Anforderung anschließend an das E/A-Ziel senden.

Beispiele

Das folgende Codebeispiel stammt aus dem beispiel wdf_osrfx2_lab im 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
    }                                                          
      

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform Desktop
UMDF-Mindestversion 1.5
Kopfzeile wudfusb.h (schließen Sie Wudfusb.h ein)
DLL WUDFx.dll

Weitere Informationen

IWDFIoRequest

IWDFMemory

IWDFUsbTargetDevice

WDFMEMORY_OFFSET