WdfIoQueueStopAndPurge 함수(wdfio.h)

[KMDF 및 UMDF에 적용]

WdfIoQueueStopAndPurge 메서드는 I/O 큐가 새 요청을 전달하지 못하도록 하고 기존의 처리되지 않은 요청 및 드라이버 소유의 취소 가능 요청을 취소하지만 큐는 새 요청을 수신하고 저장합니다.

구문

void WdfIoQueueStopAndPurge(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE StopAndPurgeComplete,
  [in, optional] WDFCONTEXT             Context
);

매개 변수

[in] Queue

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

[in, optional] StopAndPurgeComplete

드라이버 제공 EvtIoQueueState 콜백 함수에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

[in, optional] Context

프레임워크가 EvtIoQueueState 콜백 함수에 전달하는 드라이버 제공 컨텍스트 정보에 대한 형식화되지 않은 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

없음

설명

WdfIoQueueStopAndPurge 메서드는 새 요청을 큐에 추가하도록 허용하면서 I/O 큐가 드라이버에 I/O 요청을 배달하지 못하도록 합니다.

또한 큐에서 처리되지 않은 요청과 드라이버 소유의 취소 가능 요청(드라이버가 완료되거나 다시 큐에 추가되지 않은 드라이버에 전달된 요청)을 취소합니다. WdfIoQueueStopAndPurge가 진행 중인 동안 새 요청이 추가되면 드라이버가 WdfIoQueueStart를 호출할 때까지 이러한 새 요청이 전달되지 않습니다.

반면 , WdfIoQueueStop 메서드는 큐 또는 드라이버 소유의 취소 가능한 요청에서 처리되지 않은 요청을 취소하지 않습니다.

이 메서드로 인해 프레임워크가 큐에서 처리되지 않은 요청을 취소하는 경우 프레임워크는 드라이버가 큐를 제공한 경우 해당 큐에 대한 드라이버의 EvtIoCanceledOnQueue 콜백 함수를 호출합니다.

드라이버가 EvtIoQueueState 콜백 함수를 제공하는 경우 프레임워크는 드라이버에 전달된 모든 요청이 완료되거나 취소된 후 호출합니다.

WdfIoQueueStopAndPurge 메서드를 사용하면 큐가 WdfIoQueueStopAndPurge라는 드라이버 전에 새 요청을 받지 못하더라도 큐가 새 요청을 수신할 수 있습니다. 예를 들어 드라이버는 WdfIoQueueDrain을 호출하여 프레임워크가 큐에 새 I/O 요청 추가를 중지할 수 있습니다. 드라이버의 후속 WdfIoQueueStopAndPurge 호출로 인해 프레임워크는 큐에 요청 추가를 다시 시작합니다.

반면 , WdfIoQueuePurge 는 프레임워크가 지정된 큐에 I/O 요청 추가를 중지하도록 합니다.

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

예제

다음 코드 예제에서는 지정된 I/O 큐를 중지하고 제거합니다. 드라이버에 전달된 모든 요청이 완료되거나 취소된 후 프레임워크는 드라이버의 EvtIoQueueStateStopAndPurge 함수를 호출합니다.

WDFCONTEXT stopandpurgeContext;

stopandpurgeContext = &myContext;

WdfIoQueueStopAndPurge(
               queue,
               EvtIoQueueStateStopAndPurge,
               stopandpurgeContext
               );

요구 사항

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

추가 정보

EvtIoCanceledOnQueue

EvtIoQueueState

WdfIoQueueStart

WdfIoQueueStopAndPurgeSynchronousously