WdfIoQueueReadyNotify 함수(wdfio.h)

[KMDF 및 UMDF에 적용]

WdfIoQueueReadyNotify 메서드는 이전에 비어 있던 지정된 I/O 큐가 하나 이상의 I/O 요청을 받을 때마다 프레임워크가 호출하는 이벤트 콜백 함수를 등록(또는 등록 취소)합니다.

구문

NTSTATUS WdfIoQueueReadyNotify(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
  [in, optional] WDFCONTEXT             Context
);

매개 변수

[in] Queue

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

[in, optional] QueueReady

드라이버가 준비 알림을 위해 등록하는 경우 드라이버 제공 EvtIoQueueState 콜백 함수에 대한 포인터이거나 드라이버가 등록을 취소하는 경우 NULL 입니다.

[in, optional] Context

드라이버가 준비 알림을 위해 등록하는 경우 프레임워크가 EvtIoQueueState 콜백 함수에 전달하는 드라이버 제공 컨텍스트 정보에 대한 형식화되지 않은 포인터이거나 드라이버가 등록을 취소하는 경우 NULL 입니다.

반환 값

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

반환 코드 설명
STATUS_INVALID_PARAMETER
드라이버가 잘못된 핸들을 제공했습니다.
STATUS_INVALID_DEVICE_REQUEST
다음 중 하나가 발생하면 이 값이 반환됩니다.
 

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

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

설명

드라이버가 WdfIoQueueReadyNotify 를 호출하여 EvtIoQueueState 콜백 함수를 등록한 후 프레임워크는 지정된 큐의 상태가 비어 있는 상태에서 비어 있지 않음으로 변경될 때마다 콜백 함수를 호출합니다. 특히 프레임워크는 드라이버가 아직 완료되지 않은 큐에서 이전에 배달된 요청을 소유하고 있더라도 요청이 빈 큐에 도착하면 EvtIoQueueState 를 호출합니다. 큐를 만들 때 WDF_OBJECT_ATTRIBUTES ExecutionLevel 을 지정하여 콜백이 실행되는 IRQL 을 수정할 수 있습니다. 자세한 내용은 EVT_WDF_IO_QUEUE_STATE 설명 섹션을 참조하세요.

지정된 큐가 중지되는 동안 프레임워크는 EvtIoQueueState 를 호출하지 않습니다. 큐가 시작되면 큐가 비어 있지 않으면 프레임워크에서 EvtIoQueueState 를 호출합니다.

드라이버는 수동 디스패치 메서드를 사용하는 I/O 큐에 대해서만 WdfIoQueueReadyNotify를 호출할 수 있습니다.

EvtIoQueueState 콜백 함수는 일반적으로 루프에서 WdfIoQueueRetrieveNextRequest 또는 WdfIoQueueRetrieveRequestByFileObject를 호출하여 콜백 함수가 마지막으로 실행된 이후 도착한 모든 요청을 검색합니다.

프레임워크가 EvtIoQueueState 콜백 함수를 호출하지 못하도록 하려면 드라이버가 QueueReady 매개 변수를 NULL로 설정하여 WdfIoQueueReadyNotify를 다시 호출해야 합니다. 그러나 드라이버는 먼저 WdfIoQueueStop 또는 WdfIoQueueStopSynchronously 를 호출하여 I/O 큐를 중지해야 합니다. 이후에 드라이버는 WdfIoQueueStart 를 호출하여 큐를 다시 시작할 수 있습니다.

드라이버가 WdfIoQueueReadyNotify 를 호출하여 EvtIoQueueState 콜백 함수를 등록하는 경우 WdfIoQueueReadyNotify 가 반환되기 전에 프레임워크에서 콜백 함수를 호출할 수 있습니다.

WdfIoQueueReadyNotify 메서드에 대한 자세한 내용은 I/O 요청에 대한 디스패치 메서드를 참조하세요.

예제

다음 코드 예제에서는 드라이버의 EvtIoQueueReady 함수를 등록하므로 지정된 I/O 큐가 I/O 요청을 받을 때 이 함수가 호출됩니다.

Status = WdfIoQueueReadyNotify(
                               ReadQueue,
                               EvtIoQueueReady,
                               myQueueContext
                               );

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfio.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

추가 정보

EvtIoQueueState

WDF_IO_QUEUE_CONFIG

WdfIoQueueRetrieveNextRequest

WdfIoQueueRetrieveRequestByFileObject