다음을 통해 공유


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_INFO_LENGTH_MISMATCH
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 구조체의 크기가 잘못되었습니다.
상태_불충분한_리소스
사용 가능한 메모리 양이 너무 적습니다.
 

이 메서드는 다른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