WdfRequestComplete 함수(wdfrequest.h)

[KMDF 및 UMDF에 적용]

WdfRequestComplete 메서드는 지정된 I/O 요청을 완료하고 완료 상태 제공합니다.

구문

void WdfRequestComplete(
  [in] WDFREQUEST Request,
  [in] NTSTATUS   Status
);

매개 변수

[in] Request

완료되는 I/O 요청을 나타내는 프레임워크 요청 개체에 대한 핸들입니다.

[in] Status

요청의 완료 상태 나타내는 NTSTATUS 값입니다. 유효한 상태 값에는 다음이 포함되지만 이에 국한되지는 않습니다.

STATUS_SUCCESS

드라이버가 요청을 성공적으로 완료했습니다.

STATUS_CANCELLED

드라이버가 요청을 취소하고 있습니다.

STATUS_UNSUCCESSFUL

드라이버에서 요청을 처리하는 동안 오류가 발생했습니다.

반환 값

없음

설명

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

드라이버가 WdfRequestComplete를 호출한 후 드라이버 스택의 상위 수준 드라이버는 WdfRequestGetStatus를 호출하여 Status 매개 변수에 대해 지정된 완료 상태 값을 가져올 수 있습니다. 일반적으로 드라이버는 CompletionRoutine 콜백 함수 내에서 WdfRequestGetStatus를 호출합니다.

WdfRequestComplete에 대한 호출이 반환되면 드라이버가 요청 개체에 하나 이상의 추가 참조 수를 추가하기 위해 WdfObjectReference를 호출하지 않는 한 요청 핸들은 더 이상 유효하지 않습니다. WdfRequestComplete가 반환된 후에는 드라이버가 WdfObjectReference를 호출한 경우에도 연결된 WDM IRP 구조체에 액세스하려고 시도해서는 안 됩니다. 이 요구 사항은 WdfRequestRetrieveOutputBuffer 또는 WdfRequestRetrieveInputBuffer와 같은 WDFREQUEST 에서 메서드를 호출하여 연결된 WDM IRP 구조에 액세스하는 것으로 확장됩니다.

드라이버가 WdfRequestComplete를 호출한 후 프레임워크는 드라이버가 제공한 경우 요청에 대해 드라이버의 EvtCleanupCallback 함수를 호출합니다.

드라이버는 WdfRequestComplete를 호출하는 대신 WdfRequestCompleteWithInformation 또는 WdfRequestCompleteWithPriorityBoost를 호출할 수 있습니다. 자세한 내용은 WdfRequestCompleteWithInformation 의 설명을 참조하세요.

드라이버가 WdfRequestComplete를 호출하면 프레임워크는 시스템에서 I/O 작업을 요청한 스레드의 런타임 우선 순위를 높이는 데 사용하는 기본값을 제공합니다. 기본 우선 순위 상승 값에 대한 자세한 내용은 I/O 요청을 완료할 때 우선 순위 향상 지정을 참조하세요. 드라이버는 WdfRequestCompleteWithPriorityBoost 를 호출하여 기본 우선 순위 상승 값을 재정의할 수 있습니다.

WdfRequestComplete 호출에 대한 자세한 내용은 I/O 요청 완료를 참조하세요.

예제

다음 코드 예제는 요청 처리기의 섹션입니다. 요청 처리기는 읽기 및 쓰기 요청만 허용하며 요청 유형이 읽거나 쓰지 않는 경우 오류 상태 각 요청을 완료합니다.

VOID
MyEvtIoDefault(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request
    )
{
    WDF_REQUEST_PARAMETERS  params;
    WDF_DMA_DIRECTION  direction;

...
    WDF_REQUEST_PARAMETERS_INIT(&params);

    WdfRequestGetParameters(
                            Request,
                            &params
                            );

    //
    // Validate and gather parameters.
    //
    switch (params.Type) {
        case WdfRequestTypeRead:
            length = params.Parameters.Read.Length;
            direction = WdfDmaDirectionReadFromDevice;
            break;
        case WdfRequestTypeWrite:
            length = params.Parameters.Write.Length;
            direction = WdfDmaDirectionWriteToDevice;
            break;
        default:
            WdfRequestComplete(
                               Request,
                               STATUS_INVALID_DEVICE_REQUEST
                               );
            return;
    }
...
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfrequest.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), BufAfterReqCompletedWriteA(kmdf), CompleteCanceledReq(kmdf), DeferredRequestCompleted(kmdf), DoubleCompletion(kmdf), DoubleCompletionLocal(kmdf), DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), EvtSurpriseRemoveNoRequestComplete(kmdf), InvalidReqAccess(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MarkCancOnCancReqLocal(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWrite(kmdf), MemAfterReqCompletedWriteA(kmdf), NoCancelFromEvtSurpriseRemove(kmdf), ReqDelete(kmdf), ReqIsCancOnCancReq(kmdf), ReqNotCanceledLocal(kmdf), ReqSendFail(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf)

추가 정보

WDF_REQUEST_PARAMETERS

WDF_REQUEST_PARAMETERS_INIT

WdfObjectReference

WdfRequestCompleteWithInformation

WdfRequestCompleteWithPriorityBoost

WdfRequestGetStatus