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 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
입력 매개 변수가 잘못되었습니다. |
|
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가 반환되기 전에 프레임워크는 다음을 수행합니다.
- 드라이버가 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 구조체의 TotalForwardProgressRequests 멤버에 대해 지정한 요청 개체 수를 만들고 저장합니다.
- 이전에 WdfDeviceInitSetRequestAttributes라는 드라이버가 있는 경우 각 할당에는 WdfDeviceInitSetRequestAttributes 가 지정한 컨텍스트 공간이 포함됩니다.
- 프레임워크가 만드는 각 요청 개체에 대해 드라이버의 EvtIoAllocateResourcesForReservedRequest 콜백 함수를 호출합니다.
프레임워크는 자신이 속한 프레임워크 큐 개체를 삭제할 때만 예약된 요청 개체를 삭제합니다. 드라이버가 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