다음을 통해 공유


WdfIoQueueAssignForwardProgressPolicy 함수(wdfio.h)

[KMDF에만 적용]

WdfIoQueueAssignForwardProgressPolicy 메서드를 사용하면 프레임워크가 지정된 I/O 큐의 진행률을 보장할 수 있습니다.

구문

NTSTATUS WdfIoQueueAssignForwardProgressPolicy(
  [in] WDFQUEUE                              Queue,
  [in] PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY ForwardProgressPolicy
);

매개 변수

[in] Queue

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

[in] ForwardProgressPolicy

드라이버 할당 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 구조체에 대한 포인터입니다.

반환 값

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

반환 코드 설명
STATUS_INVALID_PARAMETER
입력 매개 변수가 잘못되었습니다.
STATUS_INFO_LENGTH_MISMATCH
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 구조체의 크기가 잘못되었습니다.
STATUS_INSUFFICIENT_RESOURCES
사용 가능한 메모리 양이 너무 적습니다.
 

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다. 또한 드라이버의 EvtIoAllocateResourcesForReservedRequest 콜백 함수가 오류 상태 값을 반환하는 경우 WdfIoQueueAssignForwardProgressPolicy는 해당 값을 반환합니다.

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

설명

WdfIoQueueAssignForwardProgressPolicy 메서드는 프레임워크가 메모리 부족 상황에 대해 예약하는 요청 개체를 만들고 프레임워크가 메모리 부족 상황을 처리하기 위해 호출하는 콜백 함수를 등록합니다.

KMDF 버전 1.9에서 Queue 매개 변수가 나타내는 I/O 큐는 디바이스의 기본 I/O 큐이거나 드라이버가 WdfDeviceConfigureRequestDispatching을 호출한 큐여야 합니다. 드라이버는 WdfDeviceConfigureRequestDispatching을 호출한 후 언제든지 WdfIoQueueAssignForwardProgressPolicy를 호출할 수 있습니다.

KMDF 버전 1.11 이상에서 Queue 매개 변수가 나타내는 I/O 큐는 프레임워크에서 직접 요청을 받는 모든 큐일 수 있습니다. 예를 들어 드라이버는 IRP를 동적으로 전달할 큐를 지정할 수 있습니다.

WdfIoQueueAssignForwardProgressPolicy가 반환되기 전에 프레임워크는 다음을 수행합니다.

드라이버가 WdfIoQueueAssignForwardProgressPolicy 를 호출하여 예약된 요청 개체를 만든 후 프레임워크는 새 요청 개체를 만들려는 시도가 실패할 때마다 예약된 개체를 사용합니다. (일반적으로 이러한 오류는 메모리 부족 상황으로 인해 발생합니다.)

프레임워크는 자신이 속한 프레임워크 큐 개체를 삭제할 때만 예약된 요청 개체를 삭제합니다. 드라이버가 WdfDeviceInitSetRequestAttributes 를 호출하고 요청 개체에 대해 EvtCleanupCallback 또는 EvtDestroyCallback 콜백 함수를 지정하는 경우 프레임워크는 개체를 삭제할 때 예약된 요청 개체에 대해 이러한 콜백 함수를 호출합니다.

WdfIoQueueAssignForwardProgressPolicy 메서드 및 프레임워크의 보장된 정방향 진행률 기능을 사용하는 방법에 대한 자세한 내용은 I/O 작업의 진행률 보장을 참조하세요.

예제

이 코드 예제에서는 쓰기 요청을 수신하도록 이전에 만든 I/O 큐를 구성한 다음 큐에 대해 앞으로 진행되도록 보장합니다.

#define MAX_RESERVED_REQUESTS 10

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY queueForwardProgressPolicy;
WDFQUEUE writeQueue;
NTSTATUS status = STATUS_SUCCESS;
...
status = WdfDeviceConfigureRequestDispatching(
             device,
             writeQueue,
             WdfRequestTypeWrite
             );
if(!NT_SUCCESS(status)) {
    return status;
}
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_DEFAULT_INIT(
    &queueForwardProgressPolicy,
    MAX_RESERVED_REQUESTS
    );
status = WdfIoQueueAssignForwardProgressPolicy(
             writeQueue,
             &queueForwardProgressPolicy
             );
if(!NT_SUCCESS(status)) {
    return status;
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.9
머리글 wdfio.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf)

추가 정보

EvtIoAllocateResourcesForReservedRequest

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY

WdfDeviceConfigureRequestDispatching