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 は 、次のいずれかの値を返します。

リターン コード 説明
S_ok

FormatRequestForControlTransfer が I/O 要求オブジェクトを正常に書式設定しました。

E_OUTOFMEMORY

FormatRequestForControlTransfer で 割り当てエラーが発生しました。

E_INVALIDARG
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
Header wudfusb.h (Wudfusb.h を含む)
[DLL] WUDFx.dll

こちらもご覧ください

IWDFIoRequest

IWDFMemory

IWDFUsbTargetDevice

WDFMEMORY_OFFSET