다음을 통해 공유


UMDF 1.x 드라이버에서 USB 디바이스 작업

경고

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

프레임워크는 각 USB 디바이스를 프레임워크 USB 디바이스 개체로 나타냅니다. 드라이버가 USB I/O 대상에 대한 프레임워크의 지원에 액세스하려면 먼저 UMDF 드라이버가 프레임워크 USB 디바이스 개체를 만들어야 합니다. UMDF는 UMDF 드라이버가 다음을 수행할 수 있도록 하는 USB 디바이스 개체 메서드를 제공합니다.

UMDF-USB 디바이스 개체 만들기

프레임워크의 USB I/O 대상 기능을 사용하려면 UMDF 드라이버가 먼저 IWDFUsbTargetFactory 인터페이스에 대한 포인터를 가져와야 합니다. 포인터를 가져오려면 드라이버는 디바이스의 IWDFDevice 인터페이스의 QueryInterface 메서드를 호출해야 합니다. 다음 코드 예제에서는 QueryInterface 를 호출하여 포인터를 가져오는 방법을 보여줍니다.

hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);

드라이버는 다음에 IWDFUsbTargetFactory::CreateUsbTargetDevice 메서드를 호출하여 디바이스에 대한 USB I/O 대상 개체를 만들어야 합니다. 드라이버가 USB I/O 대상을 만든 후 드라이버는 I/O 대상에 요청을 보낼 수 있습니다. 일반적으로 드라이버는 IPnpCallbackHardware::OnPrepareHardware 콜백 함수 내에서 IWDFUsbTargetFactory::CreateUsbTargetDevice를 호출합니다.

드라이버가 IWDFUsbTargetFactory::CreateUsbTargetDevice를 호출한 후 드라이버는 USB 디바이스 정보 (예: 디바이스, USB 인터페이스 및 인터페이스 엔드포인트에 대한 USB 설명자)를 가져올 수 있습니다. USB 설명자는 USB 사양에 설명되어 있습니다.

UMDF-USB 디바이스 정보 가져오기

UMDF 드라이버가 IWDFUsbTargetFactory::CreateUsbTargetDevice 메서드를 호출하여 UMDF-USB 대상 디바이스 개체를 만든 후 드라이버는 USB 대상 디바이스 개체가 USB 디바이스에 대한 정보를 얻기 위해 정의하는 다음 메서드를 호출할 수 있습니다.

IWDFUsbTargetDevice::RetrieveDescriptor
디바이스의 USB 디바이스 설명자를 가져옵니다.

IWDFUsbTargetDevice::GetNumInterfaces
디바이스에서 지원하는 USB 인터페이스 수를 가져옵니다.

IWDFUsbTargetDevice::RetrieveUsbInterface
디바이스에서 지원하는 USB 인터페이스 중 하나를 노출하는 IWDFUsbInterface 인터페이스에 대한 포인터를 가져옵니다.

IWDFUsbTargetDevice::RetrieveDeviceInformation
USB 디바이스와 연결된 기능 정보를 검색합니다.

IWDFUsbTargetDevice::RetrievePowerPolicy
WinUsb 전원 정책을 검색합니다.

IWDFUsbTargetDevice::GetWinUsbHandle
I/O 대상 디바이스 개체와 연결된 WinUsb 인터페이스 핸들을 가져옵니다.

UMDF-USB 디바이스 개체로 컨트롤 전송 보내기

UMDF 드라이버는 IWDFUsbTargetDevice::FormatRequestForControlTransfer 메서드를 호출하여 표준, 디바이스 클래스별 또는 공급업체별 USB 제어 전송을 설명하는 I/O 요청의 형식을 지정할 수 있습니다. 그런 다음 드라이버는 IWDFIoRequest::Send 메서드를 호출하여 요청을 동기 또는 비동기적으로 보낼 수 있습니다.

UMDF-USB 디바이스에 대한 전원 정책 설정

UMDF 드라이버는 IWDFUsbTargetDevice::SetPowerPolicy 메서드를 호출하여 USB 디바이스에 대해 WinUsb에서 사용하는 전원 정책을 설정할 수 있습니다. USB 디바이스에 대한 전원 정책은 디바이스의 전원 관리 상태로 변경됩니다.