WdfWorkItemFlush 함수(wdfworkitem.h)
[KMDF 및 UMDF에 적용]
WdfWorkItemFlush 메서드는 지정된 작업 항목이 서비스된 후 를 반환합니다.
구문
void WdfWorkItemFlush(
[in] WDFWORKITEM WorkItem
);
매개 변수
[in] WorkItem
WdfWorkItemCreate에 대한 이전 호출에서 가져온 프레임워크 작업 항목 개체에 대한 핸들입니다.
반환 값
없음
설명
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
WdfWorkItemEnqueue가 호출되고 드라이버가 WdfWorkItemFlush 메서드를 호출하는 경우 시스템 작업자 스레드가 작업 항목 큐에서 지정된 작업 항목을 제거하고 드라이버의 EvtWorkItem 콜백 함수를 호출하고 EvtWorkItem 콜백 함수가 작업 항목을 처리한 후 반환될 때까지 메서드가 반환되지 않습니다. WdfWorkItemFlush는 이미 실행 중인 EvtWorkItem 콜백 함수가 완료되기를 기다립니다.
WdfWorkItemEnqueue가 호출되지 않은 경우 WdfWorkItemFlush 호출이 즉시 완료됩니다.
작업 항목 콜백 내에서 또는 동일한 시스템 작업자 스레드에서 실행되는 코드에서 WdfWorkItemFlush 를 호출하는 것은 불법입니다. 실제로 드라이버 검증 도구를 사용하도록 설정하면 WDF가 디버거에 침입하여 교착 상태가 발생할 수 있음을 경고합니다. 반면 콜백 내에서 작업 항목 개체에서 WdfObjectDelete 를 호출하는 것은 완벽하게 괜찮습니다.
작업 항목을 사용하는 대부분의 드라이버는 WdfWorkItemFlush를 호출할 필요가 없습니다. 드라이버가 작업 항목 완료를 원격 I/O 대상 제거와 동기화해야 하는 경우 WdfWorkItemFlush 를 호출할 수 있습니다. 이 경우 드라이버는 EvtIoTargetQueryRemove 콜백 함수 내에서 WdfWorkItemFlush를 호출할 수 있습니다.
작업 항목에 대한 자세한 내용은 프레임워크 작업 항목 사용을 참조하세요.
예제
다음 코드 예제는 Toaster 샘플 드라이버의 EvtIoTargetQueryRemove 콜백 함수입니다.
NTSTATUS
ToastMon_EvtIoTargetQueryRemove(
WDFIOTARGET IoTarget
)
{
PTARGET_DEVICE_INFO targetDeviceInfo = NULL;
//
// Get the I/O target object's context.
//
targetDeviceInfo = GetTargetDeviceInfo(IoTarget);
//
// Ensure that the I/O target's work item
// has been processed before closing the target.
//
WdfWorkItemFlush(targetDeviceInfo->WorkItem);
WdfIoTargetCloseForQueryRemove(IoTarget);
return STATUS_SUCCESS;
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
머리글 | wdfworkitem.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |