HID 아키텍처
Windows의 HID 드라이버 스택 아키텍처는 hidclass.sys 클래스 드라이버를 기반으로 합니다. 클라이언트 및 전송 미니 드라이버는 사용자 모드 또는 커널 모드에서 클래스 드라이버에 액세스합니다.
HID 클래스 드라이버
시스템 제공 HID 클래스 드라이버는 HIDClass(HID 디바이스 설정 클래스)에 대한 WDM 함수 드라이버 및 버스 드라이버입니다. HID 클래스 드라이버 의 실행 구성 요소가 hidclass.sys. HID 클래스 드라이버는 HID 클라이언트와 다양한 전송 간의 접착제로, HID 클라이언트를 전송과 독립적인 방식으로 작성할 수 있습니다. 이 추상화 수준을 사용하면 새 표준 또는 타사 전송이 도입될 때 클라이언트가 작업을 계속할 수 있습니다(거의 또는 전혀 수정되지 않음).
다음 다이어그램은 HID 아키텍처의 표현입니다.
위의 다이어그램에는 다음이 포함됩니다.
- HID 클라이언트 – Windows 및 타사 클라이언트 및 해당 인터페이스를 식별합니다.
- HID 클래스 드라이버 - hidclass.sys 실행 파일입니다.
- HID 전송 미니 드라이버 - Windows 및 타사 전송 및 해당 인터페이스를 식별합니다.
다음은 일반 HID 클라이언트 및 전송의 디바이스 스택 다이어그램입니다.
다음은 USB를 통해 HID 키보드 및 마우스 컬렉션을 보여 주는 또 다른 디바이스 스택 다이어그램입니다.
HID 클라이언트
HID 클라이언트는 HIDClass.sys 통신하고 특정 유형의 디바이스(예: 센서, 키보드, 마우스 등)를 나타내는 드라이버, 서비스 또는 애플리케이션입니다. 하드웨어 ID 또는 특정 HID 컬렉션을 통해 디바이스를 식별하고 다음 지침을 통해 HID 컬렉션과 통신합니다.
사용자 모드 드라이버 및 애플리케이션 및 커널 모드 드라이버는 다음을 수행하여 HID 컬렉션을 작동합니다.
- 사용자 모드 드라이버 및 애플리케이션은 HIDClass 지원 루틴(HidD_Xxx)을 사용하여 HID 컬렉션에 대한 정보를 가져옵니다.
- 커널 모드 드라이버, 사용자 모드 드라이버 및 애플리케이션은 HID 구문 분석 지원 루틴(HidP_Xxx)을 사용하고 커널 모드 드라이버는 HID 클래스 드라이버 IOCTL을 사용하여 HID 보고서를 처리합니다.
다음 표에서는 정보를 간소화합니다.
모드 | 드라이버 | 애플리케이션 |
---|---|---|
사용자 모드 | HidD_Xxx | HidP_Xxx |
커널 모드 | HidD_Xxx 또는 IOCTL_HID_xxx | 해당 없음 |
자세한 내용은 HID 컬렉션 열기를 참조 하세요.
Windows에서 지원되는 HID 클라이언트
Windows는 다음과 같은 최상위 컬렉션을 지원합니다.
사용 페이지 | 사용 | 주의 | 액세스 모드 |
---|---|---|---|
0x0001 | 0x0001 - 0x0002 | 마우스 클래스 드라이버 및 매퍼 드라이버 | 전용 |
0x0001 | 0x0004 - 0x0005 | 게임 컨트롤러 | 공유 |
0x0001 | 0x0006 - 0x0007 | 키보드/키패드 클래스 드라이버 및 매퍼 드라이버 | 전용 |
0x0001 | 0x000C | 플라이트 모드 스위치 | 공유 |
0x0001 | 0x0080 | 시스템 컨트롤(전원) | 공유 |
0x000C | 0x0001 | 소비자 컨트롤 | 공유 |
0x000D | 0x0001 | 외부 펜 디바이스 | 전용 |
0x000D | 0x0002 | 통합 펜 디바이스 | 전용 |
0x000D | 0x0004 | 터치 스크린 | 전용 |
0x000D | 0x0005 | 정밀 터치 패드(PTP) | 전용 |
0x0020 | *배수 | 센서 | 공유 |
0x0084 | 0x0004 | HID UPS 배터리 | 공유 |
0x008C | 0x0002 | 바코드 스캐너(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 전송 목록은 HID 전송 개요를 참조하세요.
Windows HLK(하드웨어 랩 키트)의 USB 일반 HID 테스트 는 HidUsb 및 HidClass 드라이버를 포함합니다. 타사 HID 미니 드라이버에 대한 HLK 테스트는 없습니다.