디바이스 인터페이스 클래스 개요
사용자 모드 코드가 I/O 요청을 지시할 수 있는 물리적, 논리적 또는 가상 디바이스의 모든 드라이버는 사용자 모드 클라이언트의 이름을 제공해야 합니다. 이름을 사용하여 사용자 모드 애플리케이션(또는 다른 시스템 구성 요소)은 I/O를 요청하는 디바이스를 식별합니다.
Windows NT 4.0 및 이전 버전의 NT 기반 운영 체제에서 드라이버는 디바이스 개체의 이름을 지정한 다음, 레지스트리에서 이러한 이름과 사용자 표시 Win32 논리 이름 사이에 기호 링크를 설정합니다.
Windows 2000부터 드라이버는 디바이스 개체의 이름을 지정하지 않습니다. 대신 디바이스 인터페이스 클래스별로 그룹화된 디바이스 인터페이스를 사용합니다. 디바이스 인터페이스 클래스는 다른 드라이버와 사용자 모드 애플리케이션을 비롯한 다른 시스템 구성 요소로 디바이스 및 드라이버 기능을 내보내는 방법입니다. 드라이버는 사용자 모드 I/O 요청을 보낼 수 있는 각 디바이스 개체에 대해 디바이스 인터페이스 클래스의 디바이스 인터페이스 인스턴스를 등록하고 사용하도록 설정할 수 있습니다. 각 디바이스 인터페이스 클래스 는 해당 클래스의 모든 디바이스 인터페이스 가 특정 I/O 계약과 같이 지원하거나 나타내야 하는 개념적 기능을 나타내야 합니다.
각 디바이스 인터페이스 클래스는 GUID와 연결됩니다. 시스템은 디바이스별 헤더 파일에서 일반적인 디바이스 인터페이스 클래스에 대한 GUID를 정의합니다. 공급업체는 추가 디바이스 인터페이스 클래스를 만들 수 있습니다.
예를 들어 세 가지 유형의 마우스 디바이스는 USB 포트를 통해 연결하는 경우, 두 번째는 직렬 포트를 통해, 세 번째는 적외선 포트를 통해 연결하는 경우에도 동일한 디바이스 인터페이스 클래스의 멤버인 디바이스 인터페이스 를 등록할 수 있습니다. 각 드라이버는 디바이스를 인터페이스 클래스 GUID_DEVINTERFACE_MOUSE 멤버로 등록합니다. 이 GUID는 헤더 파일 Ntddmou.h에 정의되어 있습니다.
드라이버는 디바이스 및 드라이버 가 기능을 지원하는 많은 디바이스 인터페이스 클래스 에 대해 제어하는 디바이스에 대해 디바이스 인터페이스를 등록하고 사용하도록 설정할 수 있습니다. 예를 들어 탑재할 수 있는 디스크용 드라이버는 디스크 인터페이스 클래스(GUID_DEVINTERFACE_DISK)와 탑재 가능한 디바이스 클래스(MOUNTDEV_MOUNTED_DEVICE_GUID)에 모두 등록해야 합니다.
드라이버가 디바이스 인터페이스 클래스의 디바이스 인터페이스 인스턴스를 등록하는 경우 I/O 관리자는 디바이스 및 디바이스 인터페이스 클래스 GUID를 기호 링크 이름과 연결합니다. 드라이버 또는 애플리케이션이 I/O를 보낼 수 있도록 해당 기호 링크를 사용할 수 있도록 하려면 드라이버에서 디바이스 인터페이스를 사용하도록 설정해야 합니다. 링크 이름의 등록은 시스템 시작에 걸쳐 유지되지만 디바이스의 모든 열거형에서 드라이버가 디바이스 인터페이스를 사용하도록 설정해야 합니다. 특정 디바이스 인터페이스 클래스 를 사용하는 애플리케이션은 해당 클래스의 디바이스 인터페이스 인스턴스를 쿼리하고 인터페이스를 지원하는 디바이스를 나타내는 기호 링크 이름 목록을 받을 수 있습니다. 그런 다음, 애플리케이션은 I/O 요청의 대상으로 기호 링크 이름을 사용할 수 있습니다.
IRP_MN_QUERY_INTERFACE 요청에 대한 응답으로 드라이버가 내보낼 수 있는 인터페이스와 디바이스 인터페이스를 혼동하지 마세요. 해당 IRP는 커널 모드 드라이버 간에 일상적인 진입점을 전달하는 데 사용됩니다.