I/O 요청 전달

드라이버는 처리할 수 없는 I/O 요청을 받으면 일반적으로 다음 중 하나를 수행합니다.

  • 수신된 요청을 다른 드라이버에 전달합니다.

  • 추가 요청을 만들고 다른 드라이버로 보냅니다.

프레임워크 기반 드라이버는 시스템의 다른 드라이버를 나타내는 I/O 대상을 사용하여 요청을 전달합니다. 드라이버는 다음 기술을 사용하여 I/O 대상에 요청을 전달할 수 있습니다.

  • 드라이버는 WdfDeviceGetIoTarget, WdfRequestFormatRequestUsingCurrentType, 마지막으로 WdfRequestSend를 호출하여 I/O 요청을 다음 하위 드라이버로 전달할 수 있습니다.

    이 기술은 드라이버가 전달하기 전에 수정할 필요가 없다는 요청을 수신하는 경우에만 유용합니다.

  • 드라이버는 WdfFdoInitSetFilter 를 호출하여 필터 드라이버로 등록할 수 있습니다.

    필터 드라이버가 특정 유형의 I/O 요청에 대한 I/O 큐를 제공하지 않는 경우 프레임워크는 해당 형식의 요청을 다음 하위 드라이버로 자동으로 전달합니다.

  • 일반적으로 함수 드라이버는 각 I/O 요청의 내용을 검사합니다. 함수 드라이버가 요청을 처리할 수 없는 경우 요청을 수정하고 I/O 대상으로 전달할 수 있습니다. 또는 하나 이상의 새 요청을 만들어 I/O 대상으로 보낼 수 있습니다.

    프레임워크의 I/O 대상 개체는 다른 드라이버에 I/O 요청을 보내는 여러 메서드를 정의합니다. 예를 들어 드라이버는 WdfIoTargetFormatRequestForReadWdfRequestSend를 차례로 호출하여 I/O 대상에 읽기 요청을 보낼 수 있습니다. I/O 대상에 대한 자세한 내용은 I/O 대상 사용을 참조하세요.

    드물게 드라이버 작성기는 I/O 대상에 요청을 보내기 전에 요청의 기본 WDM I/O 스택 위치 의 콘텐츠를 지정하려고 할 수 있습니다. 이러한 경우 드라이버는 WdfRequestSend를 호출하기 전에 WdfRequestWdmFormatUsingStackLocation을 호출할 수 있습니다.

드라이버가 일반적으로 모든 디바이스에 단일 명령을 보내야 하므로 드라이버가 여러 I/O 대상에 동일한 요청을 보내야 하는 경우가 있습니다. I/O 대상에 요청을 보내기 전에 드라이버는 WdfRequestChangeTarget 을 호출하여 I/O 대상에 액세스할 수 있는지 확인할 수 있습니다.

드라이버는 WdfRequestSend를 호출할 때 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 플래그를 설정하지 않는 한 I/O 대상으로 전달하는 모든 요청을 완료해야 합니다.

드라이버가 요청을 전달할 때 프레임워크는 문자 그대로 프레임워크 요청 개체를 보내는 드라이버에서 수신 드라이버로 전송하지 않습니다. 대신 프레임워크는 요청을 수신하는 드라이버에 새 요청 개체를 만듭니다. 요청의 기본 IRP(I/O 요청 패킷)만 한 드라이버에서 다른 드라이버로 전송됩니다.