WinUSB 아키텍처 및 모듈
WinUSB 는 다음 두 가지 기본 구성 요소로 구성됩니다.
- Winusb.sys USB 디바이스의 커널 모드 디바이스 스택에서 프로토콜 드라이버 위에 필터 또는 함수 드라이버로 설치할 수 있는 커널 모드 드라이버입니다.
- Winusb.dll WinUSB 함수를 노출하는 사용자 모드 DLL입니다. 애플리케이션은 이러한 함수를 사용하여 디바이스의 함수 드라이버로 설치될 때 Winusb.sys 통신할 수 있습니다.
사용자 지정 함수 드라이버가 필요하지 않은 디바이스의 경우 Winusb.sys 함수 드라이버로 디바이스의 커널 모드 스택에 설치할 수 있습니다. 그런 다음 사용자 모드 프로세스는 디바이스 I/O 컨트롤 요청 집합을 사용하거나 WinUSB 함수를 호출 하여 Winusb.sys 통신할 수 있습니다.
다음 그림에서는 여러 Winusb.sys 인스턴스를 포함하는 USB 드라이버 스택을 보여 줍니다.
위의 그림에서는 각각 등록된 단일 디바이스 인터페이스가 있는 세 개의 디바이스 인터페이스 클래스를 구현하는 WinUSB 구성 예제를 보여 줍니다.
- Winusb.sys 인스턴스 1은 Usboem.dll(사용자 모드 드라이버)를 지원하는 디바이스 인터페이스 A를 등록합니다.
- Winusb.sys 인스턴스 2는 SVCHOST(시스템 서비스)를 사용하여 Winusb.dll 통신하는 스캐너(Usbscan.exe)에 대한 사용자 모드 드라이버를 지원하는 디바이스 인터페이스 B를 등록합니다.
- Winusb.sys 인스턴스 3은 펌웨어 업데이트 유틸리티(Usbfw.exe)를 지원하는 디바이스 인터페이스 C를 등록합니다.
로드된 Winusb.sys 인스턴스가 정확히 하나 있습니다. PDO(물리적 디바이스 개체)는 비컴포지토리 디바이스(다이어그램의 인스턴스 1)를 나타내거나 복합 디바이스(인스턴스 2 및 3)의 인터페이스 또는 인터페이스 컬렉션을 나타낼 수 있습니다. USB WMCDC(무선 통신 디바이스 클래스) 디바이스의 경우 PDO는 여러 인터페이스 컬렉션을 나타낼 수도 있습니다. (WMCDC 디바이스 용 PDO에 대한 자세한 내용은무선 모바일 통신 디바이스 클래스에 대한 지원.)
모든 사용자 모드 애플리케이션은 WinUSB Winusb.dll(동적 링크 라이브러리)를 로드하고 이 모듈에서 노출되는 WinUSB 함수를 호출하여 USB 스택과 통신할 수 있습니다.