설치 클래스 및 인터페이스 클래스 비교

성공적인 Windows 드라이버 개발 및 디바이스 관리에는 디바이스 설정 클래스 와 디바이스 인터페이스 클래스 간의 차이점을 이해하는 것이 중요합니다. 이러한 클래스는 비슷하게 표시될 수 있지만 Windows 디바이스 에코시스템에서 근본적으로 다른 용도로 사용됩니다. 설치 클래스는 운영 체제에서 디바이스를 설치하고 구성하는 방법을 제어합니다. 인터페이스 클래스는 드라이버, 애플리케이션 및 디바이스 간의 런타임 통신 및 기능을 가능하게 합니다. 이러한 차이점을 이해하면 디바이스 설치에 올바른 클래스 유형을 선택하고 적절한 디바이스 알림을 구현하며 일반적인 개발 문제를 방지할 수 있습니다.

디바이스는 종종 셋업 클래스에 속하며 여러 디바이스 인터페이스를 서로 다른 인터페이스 클래스에 동시에 노출합니다. 그럼에도 불구하고 두 가지 유형의 클래스는 서로 다른 용도로 사용되며 서로 교환할 수 없습니다.

디바이스, 해당 설정 클래스 및 다양한 인터페이스 클래스 간의 관계를 보여 주는 다이어그램

Comparison

다음 표에는 설치 클래스와 인터페이스 클래스 간의 주요 차이점과 관계가 요약되어 있습니다.

측면 설정 클래스 인터페이스 클래스
기본 목적 유사한 설치 및 구성을 가진 디바이스 그룹화 유사한 기능 및 통신을 제공하는 디바이스 인터페이스 그룹화
사용법 장치 설치 중 Windows에서 사용됨 드라이버 및 애플리케이션에서 디바이스 상호 작용에 사용
GUID 정의 일반적으로 Devguid.h에 정의됩니다. 디바이스별 헤더 파일(예: Ntddmou.h, Ntddpar.h)에 정의됨
그룹화 조건 비슷하게 설치 및 구성된 디바이스 일반적으로 특정 IO 계약을 구현하는 디바이스 인터페이스인
통지 디바이스 도착 또는 제거 알림에 사용되지 않음 디바이스 인터페이스 도착 및 제거 알림을 등록하는 데 사용됩니다.
Examples 센서, 펌웨어, Bluetooth 오디오 캡처, 오디오 렌더링, 주변 광원 센서
관계 디바이스가 하나의 설정 클래스에 속합니다. 디바이스는 서로 다른 인터페이스 클래스에 걸쳐 0개 이상의 디바이스 인터페이스를 노출할 수 있습니다.
평생 설치 과정 중 관련 디바이스 작동 중 관련

디바이스 인터페이스 클래스와 디바이스 설정 클래스라는 두 가지 디바이스 클래스 유형을 구분하는 것이 중요합니다. 두 가지는 쉽게 혼동 될 수 있습니다. 사용자 모드 코드에서 두 클래스는 동일한 디바이스 설치 함수 집합을 사용합니다. 또한 동일한 데이터 구조 집합(디바이스 정보 집합)을 사용합니다.

동일한 설정 클래스, 다른 인터페이스 클래스:

  • 장치: 서로 다른 두 개의 센서 장치
  • 설정 클래스: 두 디바이스는 둘 다 Sensors 클래스에 있습니다.
  • 인터페이스 클래스: 한 센서는 주변 광원 센서 디바이스 인터페이스를 노출하고 다른 센서는 가속도계 디바이스 인터페이스를 노출합니다.

USB 마우스 장치 및 USB 키보드 디바이스를 고려합니다. 둘 다 동일한 인터페이스 클래스(휴먼 인터페이스 디바이스)를 사용합니다. 그러나 각각 다른 설정 클래스인 마우스 및 키보드에 속합니다.

동일한 인터페이스 클래스, 다른 설정 클래스:

  • 장치: USB 마우스 및 USB 키보드
  • 인터페이스 클래스: 두 디바이스는 동일한 인터페이스 클래스(휴먼 인터페이스 디바이스)를 사용하여 시스템과 통신합니다.
  • 설정 클래스: 마우스 디바이스는 마우스 설정 클래스에 속하지만 키보드 장치는 키보드 설정 클래스에 속합니다.

장치 설정 클래스

디바이스 설정 클래스는 Windows에서 디바이스의 설치 및 구성에만 사용되는 미리 정의된 범주입니다. 운영 체제가 설치 프로세스 중에 디바이스를 관리하는 방법을 이해하는 데 도움이 됩니다. 설치 클래스는 동일한 방식으로 설치 및 구성된 디바이스를 그룹화하기 위한 메커니즘을 제공합니다. 설치 클래스에 대한 자세한 내용은 공급업체에 제공되는 시스템 정의 디바이스 설정 클래스를 참조하세요.

Windows 디바이스 설정 클래스는 시스템 파일 Devguid.h에 정의되어 있습니다. 이 파일은 설치 클래스에 대한 일련의 GUID를 정의합니다. 그러나 Devguid.h에 정의된 디바이스 설정 클래스는 디바이스 인터페이스 클래스와 혼동해서는 안 됩니다. Devguid.h 파일에는 설치 클래스에 대한 GUID만 포함됩니다.

디바이스 인터페이스 클래스

디바이스 인터페이스 클래스는 공유 특성 또는 기능에 따라 디바이스 인터페이스를 그룹화하기 위한 메커니즘을 제공합니다. 드라이버 및 사용자 애플리케이션은 특정 인터페이스 클래스의 디바이스 인터페이스에 대한 알림을 받도록 등록할 수 있습니다. 즉, 해당 클래스에 속하는 모든 디바이스 인터페이스가 활성화(도착)되거나 비활성화(제거)될 때 알림을 받습니다. 개별 디바이스를 추적할 필요가 없습니다. 디바이스 인터페이스 클래스는 디바이스에서 노출하는 디바이스 인터페이스를 그룹화합니다. 디바이스 인터페이스가 추가되거나 제거될 때의 알림에 등록합니다.

인터페이스 클래스의 정의는 단일 파일에 제공되지 않습니다. 디바이스 인터페이스 클래스는 항상 특정 디바이스 클래스에만 속하는 헤더 파일에 정의됩니다. 예를 들어 Ntddmou.h 에는 마우스 인터페이스 클래스를 나타내는 GUID인 GUID_DEVINTERFACE_MOUSE 정의가 포함됩니다. Ntddpar.h 는 병렬 디바이스에 대한 인터페이스 클래스 GUID를 정의합니다. Ntddpcm.h 는 PCMCIA 디바이스에 대한 표준 인터페이스 클래스 GUID를 정의합니다. Ntddstor.h 는 스토리지 디바이스에 대한 인터페이스 클래스 GUID를 정의합니다.

디바이스 인터페이스 알림을 등록하려면 디바이스 인터페이스 클래스와 관련된 헤더 파일에 있는 GUID를 사용합니다. 이러한 GUID를 사용하면 디바이스 인터페이스 인스턴스가 도착할 때 알림을 받을 수 있습니다. 드라이버가 인터페이스 클래스 GUID 대신 설치 클래스 GUID를 사용하여 알림을 등록하는 경우 인터페이스가 도착해도 알림을 받지 못합니다.

새 인터페이스 클래스를 정의할 때 단일 GUID를 사용하여 설치 클래스와 인터페이스 클래스를 모두 식별하지 마세요.