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 반환합니다. 그렇지 않으면 이 메서드는 다음 값을 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
I/O 요청이 출력 버퍼를 제공하지 않았습니다. |
|
메모리가 부족하여 버퍼를 검색할 수 없습니다. 드라이버는 오류 상태 값으로 요청을 완료해야 합니다. |
이 메서드는 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::RetrieveInputBuffer
IWDFIoRequest2::RetrieveOutputBuffer