WdfRequestRetrieveUnsafeUserOutputBuffer 함수(wdfrequest.h)

[KMDF에만 적용]

WdfRequestRetrieveUnsafeUserOutputBuffer 메서드는 요청의 데이터 버퍼 액세스 기술이 버퍼링되거나 직접 I/O가 아닌 경우 I/O 요청의 출력 버퍼를 검색합니다.

구문

NTSTATUS WdfRequestRetrieveUnsafeUserOutputBuffer(
  [in]            WDFREQUEST Request,
  [in]            size_t     MinimumRequiredLength,
  [out]           PVOID      *OutputBuffer,
  [out, optional] size_t     *Length
);

매개 변수

[in] Request

프레임워크 요청 개체에 대한 핸들입니다.

[in] MinimumRequiredLength

드라이버가 I/O 요청을 처리하는 데 필요한 최소 버퍼 크기(바이트)입니다.

[out] OutputBuffer

버퍼의 주소를 받는 위치에 대한 포인터입니다.

[out, optional] Length

버퍼의 크기를 받는 위치에 대한 포인터(바이트)입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

WdfRequestRetrieveUnsafeUserOutputBuffer 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INVALID_PARAMETER
입력 매개 변수가 잘못되었습니다.
STATUS_INVALID_DEVICE_REQUEST
다음 중 하나가 발생하면 이 값이 반환됩니다.
STATUS_BUFFER_TOO_SMALL
MinimumRequiredLength 매개 변수는 버퍼의 실제 크기보다 큰 버퍼 크기를 지정합니다.
 

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

EvtIoInCallerContext 콜백 함수에서 WdfRequestRetrieveUnsafeUserOutputBuffer 메서드를 호출해야 합니다. WdfRequestRetrieveUnsafeUserOutputBuffer를 호출한 후 드라이버는 WdfRequestProbeAndLockUserBufferForWrite를 호출해야 합니다.

요청의 I/O 제어 코드가 IRP_MJ_READ 또는 IRP_MJ_DEVICE_CONTROL 경우 드라이버는 WdfRequestRetrieveUnsafeUserOutputBuffer를 호출할 수 있습니다.

드라이버는 Request 매개 변수가 나타내는 I/O 요청을 완료할 때까지 검색된 버퍼에 액세스할 수 있습니다.

WdfRequestRetrieveUnsafeUserOutputBuffer에 대한 자세한 내용은 Framework-Based 드라이버에서 데이터 버퍼 액세스를 참조하세요.

예제

WdfRequestRetrieveUnsafeUserOutputBuffer를 사용하는 코드 예제는 WdfRequestProbeAndLockUserBufferForRead를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
머리글 wdfrequest.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), OutputBufferAPI(kmdf)

추가 정보

EvtIoInCallerContext

WdfRequestProbeAndLockUserBufferForWrite

WdfRequestRetrieveUnsafeUserInputBuffer