다음을 통해 공유


디바이스 정보 집합

사용자 모드에서는 디바이스 설정 클래스 또는 디바이스 인터페이스 클래스 에 속하는 디바이스는 디바이스 정보 요소 및 디바이스 정보 집합을 사용하여 관리됩니다 . 디바이스 정보 집합은 일부 디바이스 설정 클래스 또는 디바이스 인터페이스 클래스에 속하는 모든 디바이스에 대한 디바이스 정보 요소로 구성됩니다.

각 디바이스 정보 요소에는 디바이스의 devnode에 대한 핸들과 해당 요소에서 설명하는 디바이스와 연결된 모든 디바이스 인터페이스의 연결된 목록에 대한 포인터가 포함됩니다. 디바이스 정보 집합에서 설정 클래스의 멤버를 설명하는 경우 설정 클래스 멤버가 반드시 인터페이스와 연결되지는 않으므로 요소가 디바이스 인터페이스를 가리키지 않을 수 있습니다.

다음 다이어그램은 디바이스 정보 집합의 내부 구조를 보여줍니다.

디바이스 정보 집합을 보여 주는 다이어그램

디바이스 정보 집합 만들기

SetupDiCreateDeviceInfoList를 사용하여 디바이스 정보 집합을 만든 후에는 SetupDiCreateDeviceInfo를 사용하여 디바이스 정보 요소를 한 번에 하나씩 만들어 목록에 추가할 수 있습니다. 또는 SetupDiGetClassDevs 를 호출하여 지정된 디바이스 설정 클래스 또는 디바이스 인터페이스 클래스와 연결된 모든 디바이스로 구성된 디바이스 정보 집합을 만들 수 있습니다.

디바이스 정보 열거

디바이스 정보 집합이 만들어지면 집합에 속한 디바이스와 디바이스 인터페이스를 모두 열거할 수 있지만 각 열거형 유형에 대해 서로 다른 작업이 필요합니다. SetupDiEnumDeviceInfo 는 특정 조건을 충족하는 정보 집합에 속하는 모든 디바이스를 열거합니다. SetupDiEnumDeviceInfo에 대한 각 호출은 디바이스 정보 요소에 해당하는 SP_DEVINFO_DATA 구조를 추출합니다. SP_DEVINFO_DATA 디바이스가 속한 클래스의 GUID와 디바이스의 devnode를 가리키는 디바이스 instance 핸들을 포함합니다. SP_DEVINFO_DATA 구조와 전체 디바이스 요소 간의 주요 차이점은 SP_DEVINFO_DATA 디바이스와 연결된 인터페이스 목록이 포함되어 있지 않다는 것입니다. 따라서 SetupDiEnumDeviceInfo 를 사용하여 디바이스 정보 집합의 인터페이스를 열거할 수 없습니다.

디바이스 정보 집합에서 디바이스 인터페이스를 열거하려면 SetupDiEnumDeviceInterfaces를 호출합니다. 이 루틴은 디바이스 정보 집합의 모든 디바이스 정보 요소를 단계별로 수행하고, 각 요소의 인터페이스 목록에서 인터페이스를 추출하고, 각 호출과 함께 하나의 인터페이스를 반환합니다. SetupDiEnumDeviceInterfaces가 두 번째 매개 변수의 입력으로 SP_DEVINFO_DATA 구조를 전달하는 경우 열거형은 SP_DEVINFO_DATA 표시된 디바이스와 연결된 인터페이스로만 제한됩니다.

SetupDiEnumDeviceInterfaces는SP_DEVICE_INTERFACE_DATA 구조를 반환합니다. SP_DEVICE_INTERFACE_DATA 인터페이스 클래스 GUID 및 인터페이스의 이름을 가져오는 데 사용할 수 있는 인코딩된 정보가 있는 예약된 필드를 포함하여 인터페이스에 대한 기타 정보를 포함합니다. 인터페이스 이름을 얻으려면 한 단계 더 필요합니다. SetupDiGetDeviceInterfaceDetail 을 호출해야 합니다. SetupDiGetDeviceInterfaceDetail 은 인터페이스를 정의하는 시스템 개체 트리의 경로를 포함하는 SP_DEVICE_INTERFACE_DETAIL_DATA 형식의 구조를 반환합니다.