USB 디바이스 작업
이 항목에서는 버전 2부터 KMDF(Kernel-Mode Driver Framework) 또는 UMDF(User-Mode Driver Framework) 드라이버가 WDF(Windows 드라이버 프레임워크)에서 제공하는 USB 디바이스 개체 메서드를 사용하여 수행할 수 있는 작업에 대해 설명합니다.
여기에는 다음 단원이 포함되어 있습니다.
- USB 디바이스 개체 만들기
- USB 디바이스 구성
- 디바이스 정보 가져오기
- USB 설명자 가져오기
- 컨트롤 전송 보내기
- 디바이스 포트 다시 설정 및 Power-Cycling
- 디바이스에 URB 보내기
간단한 KMDF 기반 USB 클라이언트 드라이버 작성에 대한 단계별 지침은 첫 번째 KMDF(USB 클라이언트 드라이버)를 작성하는 방법을 참조하세요.
USB 디바이스 개체 만들기
프레임워크의 USB I/O 대상 개체(WDFUSBDEVICE, WDFUSBINTERFACE 및 WDFUSBPIPE)를 사용하려면 클라이언트 드라이버가 먼저 WdfUsbTargetDeviceCreateWithParameters 를 호출하여 USB 디바이스 개체를 만들어야 합니다. 일반적으로 드라이버는 EvtDevicePrepareHardware 콜백 함수에서 WdfUsbTargetDeviceCreateWithParameters를 호출합니다.
드라이버가 WdfUsbTargetDeviceCreateWithParameters를 호출하면 프레임워크는 WDFUSBDEVICE 개체를 만들고 USB 디바이스를 나타내는 FDO와 연결합니다. 메서드는 USB 클라이언트 드라이버가 실제 디바이스와 통신하는 데 사용할 수 있는 새 프레임워크 USB 디바이스 개체에 대한 핸들을 반환합니다.
WdfUsbTargetDeviceCreateWithParameters를 호출한 후 드라이버는 WdfUsbTargetDeviceDeviceDescriptor 및 WdfUsbTargetDeviceRetrieveConfigDescriptor를 호출하여 디바이스에서 USB 설명자를 가져올 수 있습니다. 이러한 설명자에는 디바이스의 첫 번째 구성, 인터페이스 설정 및 정의된 엔드포인트에 대한 정보가 포함됩니다. (USB 설명자는 공식 USB 사양에 정의되어 있습니다.)
USB 디바이스 구성
WdfUsbTargetDeviceCreateWithParameters 메서드는 디바이스의 첫 번째 구성에 포함된 각 USB 인터페이스에 대한 프레임워크 USB 인터페이스 개체도 만듭니다.
WdfUsbTargetDeviceCreateWithParameters를 호출한 후 클라이언트 드라이버는 WdfUsbTargetDeviceSelectConfig를 호출하여 구성을 선택해야 합니다. 이 메서드는 선택한 구성에서 인터페이스의 각 대체 설정에 대한 프레임워크 인터페이스 개체를 만듭니다.
또한 메서드는 선택한 구성의 각 인터페이스의 각 대체 설정에 정의된 엔드포인트를 나타내는 파이프 개체를 만듭니다.
구성을 선택한 후 필요한 경우 구성의 인터페이스에 대한 대체 설정을 변경할 수 있습니다.
WdfUsbTargetDeviceSelectConfig를 호출하여 디바이스를 구성 해제할 수도 있습니다.
관련 정보는 다음을 참조하세요.
디바이스 정보 가져오기
디바이스를 구성한 후 클라이언트 드라이버는 다음 메서드를 호출하여 USB 디바이스에 대한 정보를 가져올 수 있습니다.
WdfUsbTargetDeviceQueryUsbCapability
호스트 컨트롤러 및 USB 드라이버 스택이 특정 기능을 지원하는지 여부를 결정합니다. WdfUsbTargetDeviceQueryUsbCapability를 호출하기 전에 드라이버는 WdfUsbTargetDeviceCreateWithParameters를 호출해야 합니다.
WdfUsbTargetDeviceGetIoTarget
USB 디바이스와 연결된 I/O 대상 개체에 대한 핸들을 반환합니다. 드라이버는 이 핸들을 WdfRequestSend 또는 WdfIoTargetStop에 전달할 수 있습니다.
WdfUsbTargetDeviceRetrieveInformation
USB 디바이스와 연결된 버전 및 기능 정보를 검색합니다.
WdfUsbTargetDeviceIsConnectedSynchronous(KMDF에만 해당)
디바이스가 연결되어 있는지 확인합니다.
WdfUsbTargetDeviceRetrieveCurrentFrameNumber(KMDF에만 해당)
현재 USB 프레임 번호를 검색합니다.
USB 설명자 가져오기
USB 디바이스의 설명자에 포함된 유니코드 문자열을 가져오려면 드라이버는 다음 방법 중 하나로 호출할 수 있습니다.
WdfUsbTargetDeviceGetDeviceDescriptor
디바이스의 USB 디바이스 설명자를 가져옵니다.
WdfUsbTargetDeviceRetrieveConfigDescriptor
디바이스의 USB 구성 설명자, 인터페이스 설명자 및 엔드포인트 설명자를 가져옵니다.
WdfUsbTargetDeviceQueryString
유니코드 문자열을 드라이버 제공 버퍼에 복사합니다.
WdfUsbTargetDeviceAllocAndQueryString
유니코드 문자열을 프레임워크 제공 버퍼에 복사합니다.
WdfUsbTargetDeviceFormatRequestForString
유니코드 문자열에 대한 요청의 형식을 지정합니다. 드라이버는 WdfRequestSend 를 호출하여 요청을 동기적으로 또는 비동기적으로 보낼 수 있습니다.
컨트롤 전송 보내기
드라이버는 다음 메서드를 호출하여 표준, 디바이스 클래스별 또는 공급업체별 USB 제어 전송을 설명하는 I/O 요청을 보낼 수 있습니다.
WdfUsbTargetDeviceSendControlTransferSynchronously
USB 제어 전송 요청을 동기적으로 보냅니다.
WdfUsbTargetDeviceFormatRequestForControlTransfer
USB 제어 전송에 대한 요청의 형식을 지정합니다. 드라이버는 WdfRequestSend 를 호출하여 요청을 동기적으로 또는 비동기적으로 보낼 수 있습니다.
관련 정보는 USB 제어 전송을 보내는 방법을 참조하세요.
디바이스 포트 다시 설정 및 Power-Cycling
드라이버는 다음 메서드를 호출하여 디바이스가 연결된 USB 포트를 다시 설정하거나 전원을 순환할 수 있습니다.
WdfUsbTargetDeviceResetPortSynchronously
디바이스의 USB 포트를 다시 설정하라는 요청을 동기적으로 보냅니다.
WdfUsbTargetDeviceCyclePortSynchronously(KMDF에만 해당)
디바이스의 USB 포트를 전원 순환하는 요청을 동기적으로 보냅니다.
WdfUsbTargetDeviceFormatRequestForCyclePort(KMDF에만 해당)
디바이스의 USB 포트를 전원 순환하기 위한 요청의 형식을 지정합니다. 드라이버는 WdfRequestSend 를 호출하여 요청을 동기적으로 또는 비동기적으로 보내야 합니다.
관련 정보는 USB 파이프 오류에서 복구하는 방법을 참조하세요.
디바이스에 URB 보내기
KMDF 드라이버가 URL이 포함된 I/O 요청을 전송하여 USB 디바이스와 통신하는 경우 드라이버는 다음 메서드를 호출할 수 있습니다.
WdfUsbTargetDeviceCreateUrb(KMDF에만 해당)
URB(USB 요청 블록)를 할당합니다. WdfUsbTargetDeviceCreateUrb를 호출하기 전에 드라이버는 WdfUsbTargetDeviceCreateWithParameters를 호출해야 합니다.
WdfUsbTargetDeviceCreateIsochUrb(KMDF에만 해당)
URB(등시 USB 요청 블록)를 할당합니다. WdfUsbTargetDeviceCreateIsochUrb를 호출하기 전에 드라이버는 WdfUsbTargetDeviceCreateWithParameters를 호출해야 합니다.
WdfUsbTargetDeviceSendUrbSynchronously(KMDF에만 해당)
URB를 포함하는 I/O 요청을 동기적으로 보냅니다.
WdfUsbTargetDeviceFormatRequestForUrb(KMDF에만 해당)
URB를 포함하는 I/O 요청의 형식을 지정합니다. 드라이버는 WdfRequestSend 를 호출하여 요청을 동기적으로 또는 비동기적으로 보내야 합니다.
WdfUsbTargetDeviceWdmGetConfigurationHandle(KMDF에만 해당)
디바이스의 USBD 구성 핸들을 반환합니다. 일부 URL에는 이 핸들이 필요합니다.
URL에 대한 일반적인 개념적 배경은 URL 할당 및 빌드를 참조하세요.