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(¶ms);
WdfRequestGetParameters(
Request,
¶ms
);
//
// 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;
}
...
}
요구 사항
추가 정보
WdfRequestCompleteWithInformation