WdfIoTargetPurge 함수(wdfiotarget.h)
[KMDF 및 UMDF에 적용]
WdfIoTargetPurge 메서드는 로컬, 원격 또는 특수 I/O 대상에 큐에 대기 중인 모든 I/O 요청을 취소하고 새 I/O 요청이 큐에 대기되지 않도록 합니다. 또한 메서드는 I/O 대상의 큐를 떠나 낮은 드라이버로 입력한 I/O 요청을 취소하려고 시도합니다.
구문
void WdfIoTargetPurge(
[in] WDFIOTARGET IoTarget,
[in] WDF_IO_TARGET_PURGE_IO_ACTION Action
);
매개 변수
[in] IoTarget
WdfDeviceGetIoTarget 또는 WdfIoTargetCreate에 대한 이전 호출 또는 WdfUsbTargetPipeGetIoTarget과 같은 특수 I/O 대상에서 제공하는 메서드에서 가져온 로컬 또는 원격 I/O 대상 개체에 대한 핸들입니다.
[in] Action
전달된 모든 요청이 완료되거나 취소될 때까지 프레임워크가 WdfIoTargetPurge에서 반환될 때까지 대기해야 하는지 여부를 나타내는 WDF_IO_TARGET_PURGE_IO_ACTION 형식의 값입니다.
반환 값
없음
설명
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
드라이버가 이전에 WdfUsbTargetPipeConfigContinuousReader를 호출한 경우 IRQL = PASSIVE_LEVEL WdfIoTargetPurge 를 호출해야 합니다. 드라이버가 WdfUsbTargetPipeConfigContinuousReader를 호출하지 않은 경우 WdfIoTargetPurge의 Action 매개 변수가 WdfIoTargetPurgeIo이면 IRQL <= DISPATCH_LEVEL WdfIoTargetPurge를 호출할 수 있습니다. 그렇지 않으면 IRQL = PASSIVE_LEVEL WdfIoTargetPurge 를 호출해야 합니다.
WdfIoTargetPurge를 동기 호출로 만들기 위해 드라이버는 Action 매개 변수의 WdfIoTargetPurgeIoAndWait 값을 설정할 수 있습니다. 이 경우 WdfIoTargetPurge 는 배달된 모든 요청이 완료되거나 취소될 때까지 반환될 때까지 기다립니다.
드라이버가 WdfIoTargetPurge를 호출한 후에도 요청의 WDF_REQUEST_SEND_OPTIONS 구조에서 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 플래그를 설정하여 대상에 요청을 보낼 수 있습니다. 예를 들어 드라이버는 드라이버가 WdfIoTargetPurge를 호출한 후 USB 파이프 재설정 요청(WdfUsbTargetPipeResetSynchronously 참조)과 같은 요청을 디바이스에 보낼 수 있습니다.
드라이버가 WdfIoTargetPurge를 호출하는 경우 프레임워크는 요청의 WDF_REQUEST_SEND_OPTIONS구조에서 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 플래그 또는 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 플래그를 사용하여 이전에 대상에 전송된 I/O 요청을 취소하거나 기다리지 않습니다.
드라이버가 I/O 큐를 제거한 후 WdfIoTargetStart를 호출하여 큐를 다시 시작할 수 있습니다.
드라이버는 WdfIoTargetStart, WdfIoTargetStop 및 WdfIoTargetPurge 를 동기적으로 호출해야 합니다. 드라이버가 이러한 함수 중 하나를 호출한 후에는 이전 호출이 반환될 때까지 다른 함수를 호출하지 않아야 합니다.
드라이버는 WdfIoTargetStart을 호출하지 않고 WdfIoTargetPurge를 여러 번 호출할 수 있습니다. 예를 들어 드라이버는 다음을 수행할 수 있습니다.
- WdfIoTargetPurge를 호출하고 WdfIoTargetPurgeIo의 작업 값을 지정합니다.
- 대상에서 I/O 요청 처리를 다시 시작해야 하는지 여부를 결정합니다.
- 대상이 다시 시작되면 WdfIoTargetStart을 호출합니다. 그렇지 않으면 WdfIoTargetPurgetAndWait 의 작업 값을 사용하여 WdfIoTargetPurge를 다시 호출합니다.
I/O 대상 상태에 대한 자세한 내용은 일반 I/O 대상의 상태 제어를 참조하세요.
I/O 대상에 대한 자세한 내용은 I/O 대상 사용을 참조하세요.
예제
다음 코드 예제에서는 드라이버가 USB 파이프에 연속 판독기를 사용하는 경우 EvtDeviceD0Exit 콜백 함수가 WdfIoTargetPurge를 호출하는 방법을 보여 줍니다.
NTSTATUS
MyEvtDeviceD0Exit(
IN WDFDEVICE Device,
IN WDF_POWER_DEVICE_STATE TargetState
)
{
PDEVICE_CONTEXT pDeviceContext;
pDeviceContext = GetMyDeviceContext(Device);
WdfIoTargetPurge(
WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
WdfIoTargetPurgeIoAndWait
);
return STATUS_SUCCESS;
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.11 |
최소 UMDF 버전 | 2.0 |
머리글 | wdfiotarget.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL | 설명 섹션을 참조하십시오. |
DDI 규정 준수 규칙 | DriverCreate(kmdf) |