[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