HID 아키텍처

Windows의 HID 드라이버 스택 아키텍처는 hidclass.sys라는 클래스 드라이버를 기반으로 합니다. 클라이언트 및 전송 미니드라이버가 사용자 모드 또는 커널 모드에서 클래스 드라이버에 액세스합니다.

HID 클래스 드라이버

시스템 제공 HID 클래스 드라이버는 HIDClass(HID 디바이스 설정 클래스)에 대한 WDM 함수 드라이버 및 버스 드라이버입니다. HID 클래스 드라이버의 실행 가능한 구성 요소는 hidclass.sys. HID 클래스 드라이버는 HID 클라이언트와 다양한 전송 간의 접착제입니다. 이렇게 하면 HID 클라이언트를 전송과 독립적으로 작성할 수 있습니다. 이 추상화 수준을 사용하면 새 표준 또는 타사 전송이 도입될 때 클라이언트가 계속 작동할 수 있습니다(거의 또는 전혀 수정하지 않음).

다음은 아키텍처 표현입니다.

hid 클라이언트, hid 클래스 드라이버 및 hid 전송 구성 요소를 보여 주는 간소화된 hid 드라이버 스택입니다.

위의 다이어그램에는 다음이 포함됩니다.

  • HID 클라이언트 – Windows 및 타사 클라이언트와 해당 인터페이스를 식별합니다.
  • HID 클래스 드라이버 - hidclass.sys 실행 파일입니다.
  • HID 전송 미니드라이버 - Windows 및 타사 전송 및 해당 인터페이스를 식별합니다.

다음은 일반 HID 클라이언트 및 전송의 디바이스 스택 다이어그램입니다.

일반 HID 클라이언트 및 전송을 위한 HID 디바이스 스택입니다.

다음은 USB를 통해 HID 키보드 및 마우스 컬렉션을 보여 주는 또 다른 디바이스 스택 다이어그램입니다.

USB를 통해 키보드 및 마우스에 대한 HID 디바이스 스택입니다.

HID 클라이언트

HID 클라이언트는 HIDClass.sys 통신하고 특정 유형의 디바이스(예: 센서, 키보드, 마우스 등)를 나타내는 드라이버, 서비스 또는 애플리케이션입니다. 하드웨어 ID 또는 특정 HID 컬렉션을 통해 디바이스를 식별하고 다음 지침을 통해 HID 컬렉션과 통신합니다.

사용자 모드 드라이버 및 애플리케이션 및 커널 모드 드라이버는 다음을 수행하여 HID 컬렉션을 작동합니다.

  • 사용자 모드 드라이버 및 애플리케이션은 HIDClass 지원 루틴(HidD_Xxx)을 사용하여 HID 컬렉션에 대한 정보를 가져옵니다.
  • 커널 모드 드라이버, 사용자 모드 드라이버 및 애플리케이션은 HID 구문 분석 지원 루틴(HidP_Xxx)을 사용하고 커널 모드 드라이버는 HID 클래스 드라이버 IOCTL을 사용하여 HID 보고서를 처리합니다.

다음 표는 위에 나열된 정보의 단순화입니다.

Mode 드라이버 애플리케이션
사용자 모드 HidD_Xxx HidP_Xxx
커널 모드 HidD_Xxx OR IOCTL_HID_xxx 해당 없음

자세한 내용은 HID 컬렉션 열기를 참조하세요.

Windows에서 지원되는 HID 클라이언트

Windows는 다음과 같은 최상위 컬렉션을 지원합니다.

사용 페이지 사용량 Windows 7 Windows 8 Windows 10 참고 액세스 모드
0x0001 0x0001 - 0x0002 Yes Yes Yes 마우스 클래스 드라이버 및 매퍼 드라이버 단독
0x0001 0x0004 - 0x0005 Yes Yes Yes 게임 컨트롤러 공유됨
0x0001 0x0006 - 0x0007 Yes Yes Yes 키보드/키패드 클래스 드라이버 및 매퍼 드라이버 단독
0x0001 0x000C 아니요 Yes 플라이트 모드 스위치 공유됨
0x0001 0x0080 Yes Yes Yes 시스템 컨트롤(전원) 공유됨
0x000C 0x0001 Yes Yes 예(Windows 10 및 Windows 10 Mobile 모두) 소비자 컨트롤 공유(Windows 10 및 Windows 10 Mobile 모두)
0x000D 0x0001 Yes Yes Yes 외부 펜 장치 단독
0x000D 0x0002 Yes Yes Yes 통합 펜 디바이스 단독
0x000D 0x0004 Yes Yes Yes 터치 스크린 단독
0x000D 0x0005 아니요 Yes 정밀 터치패드(PTP) 단독
0x0020 *여러 아니요 Yes 센서 공유됨
0x0084 0x0004 Yes Yes Yes HID UPS 배터리 공유됨
0x008C 0x0002 No 예(Windows 8.1 이상) Yes 바코드 스캐너(hidscanner.dll) 공유됨

앞의 표에서 입력 HID 클라이언트에 대한 액세스 모드는 다른 HID 클라이언트가 해당 입력의 대상 수신자가 아닌 경우 전역 입력 상태를 가로채거나 수신하지 못하도록 하는 데만 사용됩니다 . 보안상의 이유로 RIM(원시 입력 관리자)은 이러한 모든 디바이스를 독점적으로 엽니다.

RIM에서 전용 모드로 디바이스를 여는 경우 사용자는 읽기 및 쓰기 권한을 요청하지 않고 HID 디바이스 인터페이스를 열고 HIDClass 지원 루틴(HidD_GetXxx)을 통해 HID 디바이스 정보를 가져올 수 있습니다.

공유 모드를 사용하면 여러 애플리케이션이 디바이스에 액세스할 수 있습니다. 예를 들어 여러 애플리케이션이 바코드 스캐너에 액세스하여 디바이스 기능을 문의하고 통계를 검색할 수 있습니다. 그러나 바코드 스캐너에서 디코딩된 데이터를 검색하는 작업은 전용 모드로 수행됩니다. 사용량은 USB-IF 사용량 테이블에 의해 정의됩니다.

*다중: 0x00 센서 사용량 – 0xFF 다양한 용도로 구분됩니다. 예를 들어 0x10 생체 인식 센서를 나타냅니다. 0x40 광원 센서를 나타냅니다. 이러한 할당은 연속되지 않습니다. 센서 사용량 목록은 HID에 대한 USB-IF 디바이스 클래스 정의를 참조하세요. Windows에서 지원되는 센서 사용량에 대한 자세한 내용은 HID 센서 사용량을 참조하세요.

HID 전송 드라이버

HID 클래스 드라이버는 HID 미니드라이버를 사용하여 하드웨어 입력 디바이스에 액세스하도록 설계되었습니다. HID 미니드라이버가 지원하는 입력 디바이스의 디바이스별 작업을 추상화합니다. HID 미니드라이버가 HID 클래스 드라이버에 등록하여 해당 작업을 HID 클래스 드라이버에 바인딩합니다. HID 클래스 드라이버는 미니드라이버의 지원 루틴을 호출하여 HID 미니드라이버와 통신합니다. HID 미니드라이버가 드라이버 스택 아래로 통신을 기본 버스 또는 포트 드라이버로 보냅니다.

Windows에서 지원되는 HID 전송

지원되는 HID 전송 목록은 이 페이지를 참조하세요.

Windows HLK(하드웨어 랩 키트)의 USB 일반 HID 테스트는 HidUsb 및 HidClass 드라이버를 다룹니다. 타사 HID 미니 드라이버에 대한 HLK 테스트는 없습니다.