다음을 통해 공유


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

추가 정보

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue