다음을 통해 공유


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