프레임워크에서 지원하지 않는 IRP 처리
[KMDF에만 적용]
프레임워크는 다음과 같은 주요 IRP 코드가 있는 I/O 요청을 지원하지 않습니다.
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
- IRP_MJ_DEVICE_CHANGE
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_INFORMATION
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_QUERY_VOLUME_INFORMATION
- IRP_MJ_SET_EA
- IRP_MJ_SET_INFORMATION
- IRP_MJ_SET_QUOTA
- IRP_MJ_SET_SECURITY
- IRP_MJ_SET_VOLUME_INFORMATION
프레임워크가 이러한 I/O 함수 코드 중 하나를 포함하는 IRP를 수신하는 경우 프레임워크는 IRP를 처리하지 않습니다. 드라이버가 필터 드라이버인 경우 프레임워크는 IRP를 드라이버 스택의 다음 하위 드라이버로 전달합니다. 드라이버가 필터 드라이버가 아닌 경우 프레임워크는 IoCompleteRequest를 호출하여 STATUS_INVALID_DEVICE_REQUEST 상태 값으로 IRP를 완료합니다.
드라이버가 이러한 I/O 함수 코드를 포함하는 IRP를 처리해야 하는 경우 드라이버는 WdfDeviceInitAssignWdmIrpPreprocessCallback 을 호출하여 I/O 함수 코드에 대한 EvtDeviceWdmIrpPreprocess 이벤트 콜백 함수를 등록해야 합니다.
드라이버가 EvtDeviceWdmIrpPreprocess 콜백 함수를 등록한 I/O 함수 코드가 포함된 IRP를 수신하면 프레임워크는 IRP를 콜백 함수에 전달합니다. 콜백 함수는 IRP를 처리하기 위한 WDM 규칙에 따라 IRP를 처리해야 합니다. 드라이버는 IRP를 완료하려면 IoCompleteRequest 를 호출하거나 IoCallDriver 를 호출하여 IRP를 다음 하위 드라이버에 전달해야 합니다.
프레임워크에서 지원하지 않는 IRP를 처리하는 EvtDeviceWdmIrpPreprocess 콜백 함수의 예제는 직렬 샘플 드라이버를 참조하세요.