다음을 통해 공유


EVT_WDFDEVICE_WDM_IRP_PREPROCESS 콜백 함수(wdfdevice.h)

[KMDF에만 적용]

드라이버의 EvtDeviceWdmIrpPreprocess 이벤트 콜백 함수는 프레임워크가 IRP를 처리하기 전에 IRP를 받습니다.

구문

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
  [in]      WDFDEVICE Device,
  [in, out] PIRP Irp
)
{...}

매개 변수

[in] Device

프레임워크 디바이스 개체에 대한 핸들입니다.

[in, out] Irp

IRP 구조체에 대한 포인터입니다.

반환 값

EvtDeviceWdmIrpPreprocess 콜백 함수는 다음을 수행해야 합니다.

  • IRP의 IoStatus.Status 멤버를 STATUS_SUCCESS 또는 NT_SUCCESS(상태)가 TRUE인 다른 상태 값으로 설정하고 콜백 함수가 수신된 IRP를 성공적으로 완료하면 동일한 값(IoCompleteRequest 호출 후)을 반환합니다.
  • IRP의 IoStatus.Status 멤버를 NT_SUCCESS(상태)가 FALSE와 같은 상태 값으로 설정하고 콜백 함수에서 오류를 감지하는 경우 동일한 값을 반환합니다(IoCompleteRequest를 호출한 후).
  • 콜백 함수가 IoMarkIrpPending을 호출하는 경우 STATUS_PENDING 반환합니다.
  • 콜백 함수가 해당 메서드를 호출하는 경우 WdfDeviceWdmDispatchPreprocessedIrp 메서드가 반환하는 값을 반환합니다.

설명

EvtDeviceWdmIrpPreprocess 콜백 함수를 등록하려면 드라이버가 WdfDeviceInitAssignWdmIrpPreprocessCallback을 호출해야 합니다.

드라이버는 EvtDeviceWdmIrpPreprocess 콜백 함수를 사용하여 다음 중 어느 것 또는 전부를 수행할 수 있습니다.

  • IRP를 처리하기 위한 WDM 규칙에 따라 프레임워크에서 지원하지 않는 IRP를 처리합니다.
  • 프레임워크에서 IRP를 처리하기 전에 IRP를 전처리합니다.
  • 드라이버가 IRP를 처리한 후 프레임워크에서 처리할 수 있도록 완료 루틴을 설정합니다.
EvtDeviceWdmIrpPreprocess 콜백 함수를 구현하는 방법에 대한 자세한 내용은 프레임워크 외부에서 WDM IRP 처리를 참조하세요.

EvtDeviceWdmIrpPreprocess 콜백 함수가 호출되지 않은 경우와 마찬가지로 프레임워크가 IRP를 처리하도록 하려면 콜백 함수가 WdfDeviceWdmDispatchPreprocessedIrp를 호출하여 IRP를 프레임워크에 반환해야 합니다.

드라이버가 EvtDeviceWdmIrpPreprocess 콜백 함수를 등록하는 경우 프레임워크는 콜백 함수가 수신하는 IRP에 추가 I/O 스택 위치를 추가합니다. 추가 I/O 스택 위치를 사용하면 콜백 함수가 WdfDeviceWdmDispatchPreprocessedIrp를 호출하기 전에 IoCompletion 루틴을 설정할 수 있습니다.

EvtDeviceWdmIrpPreprocess 콜백 함수는 호출 스레드의 IRQL에서 호출됩니다. IRQL은 프레임워크가 EvtDeviceWdmIrpPreprocess에 전달하는 IRP 유형에 따라 결정됩니다. 예를 들어 PnP 관리자가 IRQL = PASSIVE_LEVEL IRP_MN_QUERY_DEVICE_RELATIONS 보내는 경우 프레임워크는 IRQL = PASSIVE_LEVEL EvtDeviceWdmIrpPreprocess 를 호출합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
머리글 wdfdevice.h(Wdf.h 포함)
IRQL <=DISPATCH_LEVEL

추가 정보

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp