UMDF에서 일반 I/O 대상으로 I/O 요청 보내기
경고
UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새로운 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다.
자세한 내용은 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 큐 중 하나에서 수신했거나 드라이버가 만든 요청의 형식을 지정할 수 있습니다.
| 메서드 | 용도 |
|---|---|
드라이버가 수정되지 않은 요청을 대상으로 보낼 수 있도록 프레임워크에서 받은 요청의 형식을 지정합니다. |
|
디바이스 제어 요청 형식 지정 |
|
읽기 요청 형식 지정 |
|
쓰기 요청 형식 지정 |
|
버퍼를 플러시하는 요청의 형식을 지정합니다. |
|
파일 정보를 가져오기 위한 요청의 형식을 지정합니다. |
|
파일 정보를 설정하기 위한 요청의 형식을 지정합니다. |
I/O 요청을 I/O 대상으로 보내려면 드라이버가 IWDFIoRequest::Send 메서드를 호출합니다. I/O 요청을 동기적으로 보내려면 드라이버가 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 플래그를 Flags 매개 변수에 전달합니다. 그렇지 않으면 드라이버는 I/O 요청을 비동기적으로 보냅니다. 드라이버가 I/O 요청을 비동기적으로 보내는 경우 일반적으로 다른 드라이버가 요청을 완료할 때 드라이버에 알림이 필요합니다. 드라이버는 IRequestCallbackRequestCompletion::OnCompletion 콜백 함수를 정의하고 IWDFIoRequest::SetCompletionCallback 메서드를 호출하여 등록해야 합니다. 자세한 내용은 I/O 요청 완료를 참조하세요.
IWDFIoRequest::Send를 호출하여 I/O 요청을 보내는 드라이버는 나중에 IWDFIoRequest::CancelSentRequest 메서드를 호출하여 요청을 취소하려고 시도할 수 있습니다. 드라이버가 프레임워크에서 받은 I/O 요청을 취소하는 경우 드라이버는 CompleteStatus 매개 변수가 STATUS_CANCELLED 설정된 IWDFIoRequest::Complete 또는 IWDFIoRequest::CompleteWithInformation 메서드를 호출하여 항상 요청을 완료해야 합니다. 드라이버가 요청 개체를 만든 경우 드라이버는 요청을 완료하는 대신 IWDFObject::D eleteWdfObject 를 호출합니다.