UMDF에서 일반 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를 사용하여 시작 참조하세요.

프레임워크는 일반 I/O 대상에 대해 다음 상태를 정의합니다.

시작
I/O 대상이 열려 있고(즉, UMDF 드라이버에서 사용할 수 있음) 드라이버가 I/O 요청을 보낼 수 있습니다. 프레임워크는 적절한 드라이버에 요청을 전달합니다.

중지
I/O 대상이 열려 있지만 드라이버가 IWDFIoRequest::Send 메서드 호출에서 flags 매개 변수에 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 플래그를 전달하지 않는 한 UMDF 드라이버는 I/O 대상에 I/O 요청을 보낼 수 없습니다.

프레임워크는 적절한 드라이버에 대한 요청 배달을 중지합니다.

쿼리 제거를 위해 닫힘
I/O 대상은 디바이스가 곧 제거될 수 있으므로 일시적으로 닫힙니다.

폐쇄
I/O 대상이 닫혀 있으며 시작하거나 중지할 수 없습니다.

삭제
I/O 대상의 디바이스가 제거되었습니다.

WDF_IO_TARGET_STATE 열거형은 이러한 상태를 나타내는 값을 정의합니다.

로컬 I/O 대상 상태

프레임워크가 자동으로 열리고 로컬 I/O 대상이 시작됩니다.

필요한 경우 드라이버는 IWDFIoTargetStateManagement::Stop 을 호출하여 로컬 I/O 대상을 일시적으로 중지하고 IWDFIoTargetStateManagement::Start 를 호출하여 다시 시작할 수 있습니다. 예를 들어 드라이버가 임시 오류 조건을 검색하는 경우 로컬 I/O 대상을 중지한 다음 오류 조건이 수정되면 I/O 대상을 다시 시작할 수 있습니다.

로컬 I/O 대상의 디바이스가 제거되면 프레임워크는 자동으로 I/O 대상을 중지하고 닫고 대상의 큐에 있는 모든 I/O 요청을 취소합니다 . 프레임워크는 디바이스 개체 이벤트 콜백 함수를 호출하여 디바이스를 더 이상 사용할 수 없음을 드라이버에 알깁니다. 이러한 콜백 함수에 대한 자세한 내용은 UMDF의 PnP 및 전원 관리 시나리오를 참조하세요.

드라이버는 IWDFIoTargetStateManagement::GetState 를 호출하여 로컬 I/O 대상의 현재 상태를 가져올 수 있습니다.

원격 I/O 대상 상태

드라이버는 IWDFRemoteTarget::OpenFileByName 또는 IWDFRemoteTarget::OpenRemoteInterface 를 호출하여 원격 I/O 대상을 열어야 합니다. 드라이버가 원격 I/O 대상을 열면 프레임워크가 I/O 대상을 자동으로 시작합니다.

필요한 경우 드라이버는 IWDFRemoteTarget::Stop 을 호출하여 원격 I/O 대상을 일시적으로 중지하고 IWDFRemoteTarget::Start 를 호출하여 다시 시작할 수 있습니다.

원격 I/O 대상의 디바이스가 제거되면 드라이버가 다음 이벤트 콜백 함수를 등록하지 않는 한 프레임워크는 I/O 대상을 자동으로 중지하고 닫고 대상 큐에 있는 모든 I/O 요청을 취소합니다.

IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
원격 I/O 대상의 디바이스가 제거될 수 있음을 드라이버에 알릴 수 있습니다. 드라이버가 디바이스 제거를 허용하려면 드라이버가 IWDFRemoteTarget::CloseForQueryRemove 를 호출해야 합니다.

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
원격 I/O 대상의 디바이스가 제거되었음을 드라이버에 알릴 수 있습니다. 이 콜백 함수는 IWDFRemoteTarget::Close를 호출해야 합니다.

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
원격 I/O 대상의 디바이스를 제거하려는 시도가 취소되었음을 드라이버에 알릴 수 있습니다. 드라이버에서 대상을 계속 사용하려면 드라이버가 IWDFRemoteTarget::Reopen를 호출해야 합니다. 일반적으로 드라이버는 OnRemoteTargetRemoveCanceled 콜백 함수 내에서 Reopen를 호출하지만 OnRemoteTargetRemoveCanceled가 반환된 후 다시 열기를 대신 호출할 수 있습니다.

드라이버는 IWDFRemoteTarget::GetState 를 호출하여 원격 I/O 대상의 현재 상태를 가져올 수 있습니다.