다음을 통해 공유


UMDF에서 일반 I/O 대상으로 I/O 요청 보내기

경고

UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다.

보관된 UMDF 1 샘플은 Windows 11 버전 22H2 - 2022년 5월 드라이버 샘플 업데이트에서 찾을 수 있습니다.

자세한 내용은 UMDF를 사용하여 시작 참조하세요.

UMDF 드라이버는 동기 또는 비동기적으로 일반 I/O 대상에 I/O 요청을 보낼 수 있습니다.

드라이버가 I/O 요청을 동기적으로 보내는 경우 드라이버 스레드는 요청을 한 번에 하나씩 보냅니다. 스레드는 다음 요청을 보내기 전에 각 요청이 완료되기를 기다립니다. 이 프로세스는 I/O 요청을 비동기적으로 보내는 것보다 간단합니다. 드라이버는 많은 요청을 보내지 않고 드라이버가 각 I/O 요청을 기다리는 동안 시스템 또는 디바이스 성능이 저하되지 않는 경우 I/O 요청을 동기적으로 보낼 수 있습니다.

드라이버가 I/O 요청을 비동기적으로 보내는 경우 드라이버 스레드는 이전에 보낸 요청이 완료될 때까지 기다리지 않고 요청을 보낼 준비가 되는 즉시 각 요청을 보냅니다. 드라이버가 짧은 기간 동안 많은 I/O 요청을 처리해야 하는 경우 드라이버는 다음 요청을 보내기 전에 각 요청이 완료될 때까지 기다릴 수 없습니다. 그렇지 않으면 드라이버가 데이터 또는 디바이스의 성능을 잃을 수 있으며 전체 시스템의 성능이 저하될 수 있습니다.

UMDF 드라이버가 I/O 요청을 I/O 대상에 보내려면 먼저 드라이버가 요청 형식을 지정해야 합니다. 다음 표에서는 드라이버가 I/O 요청 형식을 지정하기 위해 호출할 수 있는 메서드를 나열합니다. 드라이버는 이러한 메서드를 사용하여 드라이버가 I/O 큐 중 하나에서 수신했거나 드라이버가 만든 요청의 형식을 지정할 수 있습니다.

메서드 용도

IWDFIoRequest::FormatUsingCurrentType

드라이버가 수정되지 않은 요청을 대상으로 보낼 수 있도록 드라이버가 프레임워크에서 받은 요청의 형식을 지정합니다.

IWDFIoTarget::FormatRequestForIoctl

디바이스 제어 요청 형식 지정

IWDFIoTarget::FormatRequestForRead

읽기 요청 형식 지정

IWDFIoTarget::FormatRequestForWrite

쓰기 요청 형식 지정

IWDFIoTarget2::FormatRequestForFlush

버퍼를 플러시하는 요청의 형식을 지정합니다.

IWDFIoTarget2::FormatRequestForQueryInformation

파일 정보를 가져오기 위한 요청의 형식을 지정합니다.

IWDFIoTarget2::FormatRequestForSetInformation

파일 정보를 설정하기 위한 요청의 형식을 지정합니다.

I/O 요청을 I/O 대상에 보내기 위해 드라이버는 IWDFIoRequest::Send 메서드를 호출합니다. I/O 요청을 동기적으로 보내려면 드라이버는 flags 매개 변수 에 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그를 전달합니다. 그렇지 않으면 드라이버는 I/O 요청을 비동기적으로 보냅니다. 드라이버가 I/O 요청을 비동기적으로 보내는 경우 일반적으로 다른 드라이버가 요청을 완료할 때 드라이버에 알림이 필요합니다. 드라이버는 IRequestCallbackRequestCompletion::OnCompletion 콜백 함수를 정의하고 IWDFIoRequest::SetCompletionCallback 메서드를 호출하여 등록해야 합니다. 자세한 내용은 I/O 요청 완료를 참조하세요.

IWDFIoRequest::Send를 호출하여 I/O 요청을 보내는 드라이버는 나중에 IWDFIoRequest::CancelSentRequest 메서드를 호출하여 요청을 취소하려고 시도할 수 있습니다. 드라이버가 프레임워크에서 받은 I/O 요청을 취소하는 경우 드라이버는 CompletionStatus 매개 변수가 STATUS_CANCELLED 설정된 IWDFIoRequest::Complete 또는 IWDFIoRequest::CompleteWithInformation 메서드를 호출하여 항상 요청을 완료해야 합니다. 드라이버가 요청 개체를 만든 경우 드라이버는 요청을 완료하는 대신 IWDFObject::D eleteWdfObject 를 호출합니다.