다음을 통해 공유


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
머리글 wudfusb.h(Wudfusb.h 포함)
DLL WUDFx.dll

추가 정보

IWDFIoRequest

IWDFMemory

IWDFUsbTargetDevice

WDFMEMORY_OFFSET