EVT_WDFDEVICE_WDM_IRP_DISPATCH 콜백 함수(wdfdevice.h)
[KMDF 및 UMDF에 적용]
드라이버의 EvtDeviceWdmIrpDispatch 이벤트 콜백 함수는 프레임워크가 IRP를 처리하기 전에 IRP를 받습니다.
구문
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
매개 변수
[in] Device
프레임워크 디바이스 개체에 대한 핸들입니다.
[in] MajorFunction
wdm.h에 정의된 IRP 주요 함수 코드 중 하나입니다.
[in] MinorFunction
MajorFunction 코드에 대해 wdm.h에 정의된 I/O IRP 부 함수 코드 중 하나입니다.
[in] Code
I/O 컨트롤 코드 값을 지정합니다. 이 매개 변수는 MajorFunction 이 IRP_MJ_DEVICE_CONTROL 설정된 경우에만 유효합니다.
[in] DriverContext
드라이버가 WdfDeviceConfigureWdmIrpDispatchCallback을 호출할 때 제공한 드라이버 정의 컨텍스트 정보에 대한 형식화되지 않은 포인터입니다.
[in, out] Irp
IRP 구조체에 대한 포인터입니다.
[in] DispatchContext
프레임워크의 디스패치 컨텍스트 정보에 대한 형식화되지 않은 포인터입니다. 드라이버는 WdfDeviceWdmDispatchIrp을 호출할 때 이 매개 변수를 제공해야 합니다.
반환 값
EvtDeviceWdmIrpDispatch 콜백 함수는 다음을 수행해야 합니다.
- 콜백 함수가 해당 메서드를 호출하는 경우 WdfDeviceWdmDispatchIrp 메서드가 반환하는 값을 반환합니다.
- 콜백 함수가 해당 메서드를 호출하는 경우 WdfDeviceWdmDispatchIrpToIoQueue 메서드가 반환하는 값을 반환합니다.
- KMDF만 IRP의 IoStatus.Status 멤버를 STATUS_SUCCESS 또는 NT_SUCCESS(상태)이 TRUE인 다른 상태 값으로 설정하고 콜백 함수가 수신된 IRP를 성공적으로 완료하면 동일한 값(IoCompleteRequest를 호출한 후)을 반환합니다.
- KMDF만IRP의 IoStatus.Status 멤버를 NT_SUCCESS(상태)가 FALSE인 상태 값으로 설정하고 콜백 함수에서 오류를 감지하면 동일한 값을 반환합니다(IoCompleteRequest를 호출한 후).
- KMDF만콜백 함수가 IoMarkIrpPending을 호출하는 경우 STATUS_PENDING 반환합니다.
설명
EvtDeviceWdmIrpDispatch 콜백 함수는 IRP에 대한 특정 큐를 선택하는 데만 사용해야 합니다. 이렇게 하려면 드라이버는 콜백 함수 내에서 WdfDeviceWdmDispatchIrpToIoQueue 메서드를 호출합니다.
이 콜백 함수에서 IRP를 검사한 후 드라이버가 IRP를 디스패치하는 방법을 모르는 경우 드라이버는 WdfDeviceWdmDispatchIrp 를 호출하여 기본 처리를 위해 IRP를 프레임워크로 반환할 수 있습니다.
UMDF 드라이버는 이 콜백 함수에서 WdfDeviceWdmDispatchIrp 또는 WdfDeviceWdmDispatchIrpToIoQueue 를 호출해야 합니다. KMDF 드라이버에는 둘 다 호출하지 않고 대신 IRP를 완료하거나 보류 중으로 표시하는 추가 옵션이 있습니다.
EvtDeviceWdmIrpDispatch 콜백 함수를 등록하려면 드라이버가 WdfDeviceConfigureWdmIrpDispatchCallback을 호출해야 합니다.
EvtDeviceWdmIrpDispatch 콜백 함수에서 드라이버는 완료 루틴을 설정해서는 안 됩니다. 완료 루틴이 필요한 경우 KMDF 드라이버는 EvtDeviceWdmIrpDispatch 대신 EvtDeviceWdmIrpPreprocess 콜백 함수 를 제공할 수 있습니다.
IRP가 도착할 때 큐를 지정하는 방법에 대한 자세한 내용은 I/O 큐에 IRP 디스패치를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.11 |
최소 UMDF 버전 | 2.17 |
머리글 | wdfdevice.h(Wdf.h 포함) |
IRQL | <=DISPATCH_LEVEL |