다음을 통해 공유


IWDFIoRequest2::RetrieveInputMemory 메서드(wudfddi.h)

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에는 새로운 기능이 추가되지 않으며 최신 버전의 Windows 10에서는 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF시작 .]을 참조하세요.

RetrieveInputMemory 메서드는 I/O 요청의 입력 버퍼를 나타내는 프레임워크 메모리 개체의 IWDFMemory 인터페이스를 검색합니다.

통사론

HRESULT RetrieveInputMemory(
  [out] IWDFMemory **Memory
);

매개 변수

[out] Memory

UMDF 메모리 개체의 IWDFMemory 인터페이스에 대한 포인터를 받는 위치의 주소입니다.

반환 값

RetrieveInputMemory 작업이 성공하면 S_OK 반환합니다. 그렇지 않으면 이 메서드는 다음 값을 반환할 수 있습니다.

반환 코드 묘사
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
I/O 요청이 출력 버퍼를 제공하지 않았습니다.
E_OUTOFMEMORY
메모리가 부족하여 버퍼를 검색할 수 없습니다. 드라이버는 오류 상태 값으로 요청을 완료해야 합니다.
 

이 메서드는 Winerror.h에 포함된 다른 값 중 하나를 반환할 수 있습니다.

발언

요청의 입력 버퍼에는 요청의 생성자가 제공한 디스크에 쓸 데이터와 같은 정보가 포함됩니다. 드라이버는 RetrieveInputMemory 호출하여 쓰기 요청 또는 디바이스 I/O 제어 요청에 대한 입력 버퍼를 가져올 수 있지만 읽기 요청은 입력 데이터를 제공하지 않기 때문에 읽기 요청에 대해서는 가져올 수 없습니다.

RetrieveInputMemory 메서드는 데이터 버퍼에 액세스하기 위해 버퍼링된 I/O 또는 직접 I/O 메서드를 사용하는 I/O 요청에 대한 입력 버퍼를 검색합니다.

RetrieveInputMemory S_OK 반환하면 드라이버는 입력 버퍼를 나타내는 UMDF 메모리 개체의 IWDFMemory 인터페이스에 대한 포인터를 받습니다. 버퍼에 액세스하려면 드라이버는 IWDFMemory::GetDataBuffer호출해야 합니다.

드라이버는 I/O 요청에 완료될 때까지 검색된 프레임워크 메모리 개체에 액세스할 수 있습니다. 드라이버가 I/O 요청을 완료하기 전에 IWDFMemory::Release호출해야 합니다.

드라이버는 RetrieveInputMemory호출하는 대신 IWDFIoRequest2::RetrieveInputBuffer호출하여 버퍼의 주소와 길이를 검색할 수 있습니다.

I/O 요청의 데이터 버퍼에 액세스하는 방법에 대한 자세한 내용은 UMDF-Based 드라이버 데이터 버퍼에 액세스하는참조하세요.

예제

다음 코드 예제에서는 IQueueCallbackWrite::OnWrite 콜백 함수가 쓰기 요청의 입력 버퍼를 나타내는 프레임워크 메모리 개체의 IWDFMemory 인터페이스를 가져오는 방법을 보여 줍니다. 그런 다음, 이 예제에서는 USB I/O 대상에 쓰기 요청을 포맷하고 보냅니다.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnWrite(
    __in IWDFIoQueue *pWdfQueue,
    __in IWDFIoRequest *pWdfRequest,
    __in SIZE_T BytesToWrite
    )
{
    HRESULT hr = S_OK;
    IWDFMemory * pInputMemory = NULL;
    IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    hr = r2->RetrieveInputMemory(&pInputMemory);
    if (FAILED(hr)) goto Exit;

    hr = pOutputPipe->FormatRequestForWrite(
                                           pWdfRequest,
                                           NULL, //pFile
                                           pInputMemory,
                                           NULL, //Memory offset
                                           NULL  //DeviceOffset
                                           );
Exit:
    if (FAILED(hr))
    {
        pWdfRequest->Complete(hr);
    }
    else
    {
        ForwardFormattedRequest(pWdfRequest, pOutputPipe);
    }
    SAFE_RELEASE(pInputMemory);
 return;
}

요구 사항

요구
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 바탕 화면
최소 UMDF 버전 1.9
헤더 wudfddi.h(Wudfddi.h 포함)
DLL WUDFx.dll

참고 항목

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputBuffer

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory