WMI 인스턴스 이름 정의
WMI 블록의 instance 특정 물리적 디바이스 또는 소프트웨어 구성 요소에서 제공하는 데이터를 포함합니다. 블록의 GUID가 블록을 고유하게 식별하는 것처럼 instance 이름은 블록의 instance 고유하게 식별합니다. WMI 클라이언트 애플리케이션은 instance 이름을 사용하여 데이터 블록에 반환된 정보를 데이터를 제공한 디바이스 또는 구성 요소와 연결합니다. WMI는 instance 이름을 사용하여 요청을 보내야 하는 디바이스를 결정합니다. 드라이버는 instance 이름을 정의할 때 PDO를 사용하는 것이 좋습니다.
드라이버는 다음 두 가지 방법 중 하나로 블록에 대한 instance 이름을 정의할 수 있습니다.
드라이버는 블록을 등록할 때 정적 instance 이름 목록을 WMI에 전달합니다.
블록이 등록되면 드라이버와 WMI 모두 이 목록에 인덱스로 instance 이름을 지정합니다. 정적 instance 이름은 드라이버 PDO의 디바이스 instance ID 또는 드라이버 정의 기본 이름을 기반으로 하거나 드라이버가 instance 이름 문자열 목록을 정의할 수 있습니다. 정적 instance 이름은 드라이버가 블록을 다시 등록하여 명시적으로 변경할 때까지 유지됩니다.
드라이버는 인스턴스를 만들 때 동적 instance 이름을 생성합니다.
드라이버는 블록을 등록할 때 블록에 대한 동적 instance 이름을 생성한다는 것을 나타냅니다. 블록이 등록되면 드라이버와 WMI는 매개 변수.WMI.Buffer에서 동적 instance 이름을 버퍼의 문자열로 전달합니다.
드라이버는 런타임에 데이터 블록의 인스턴스 수 또는 instance 이름이 자주 변경되는 경우에만 동적 instance 이름을 생성해야 합니다. 예를 들어 드라이버는 프로세스 ID 또는 TCP/IP 연결의 IP 주소를 instance 이름으로 사용할 수 있습니다. 이러한 instance 이름은 동적이어야 합니다. 정적이면 변경이 발생할 때마다 IoWMIRegistrationControl을 호출하여 인스턴스의 수와 이름을 업데이트해야 하기 때문에 드라이버에 상당한 오버헤드가 발생합니다.
대부분의 경우 정적 instance 이름은 다음과 같은 이유로 동적 instance 이름보다 선호됩니다.
정적 instance 이름은 드라이버가 동적 instance 이름에 대해 필요하므로 WMI 요청에 대한 응답으로 instance 이름 문자열을 반환할 필요가 없으므로 드라이버의 성능을 향상시킵니다.
WMI는 등록 시 정적 instance 이름 충돌을 감지하고 필요한 경우 instance 이름을 자동으로 수정하여 블록을 등록하는 드라이버 수에 관계없이 지정된 블록에 대해 모든 instance 이름이 고유합니다.
WMI는 동적 instance 이름에 대한 instance 이름 충돌을 검색할 수 없으므로 드라이버는 IoWMIAllocateInstanceIds를 사용하여 고유한 이름을 생성해야 합니다.
드라이버는 WMI 라이브러리 루틴을 사용하여 드라이버의 PDO 또는 드라이버 정의 기본 이름을 기반으로 하는 한 정적 instance 이름을 사용하는 블록에 대한 IRP를 처리할 수 있습니다.
드라이버는 WMI 라이브러리 루틴을 사용하여 동적 instance 이름을 사용하는 데이터 블록에 대한 IRP를 처리할 수 없습니다.
드라이버는 블록을 등록할 때 WMI에 전달하는 WMIREGGUID 또는 WMIGUIDREGINFO 구조체에서 WMIREG_FLAG_XXX를 설정하거나 지워 블록이 정적 또는 동적 instance 이름 및 정적 instance 이름의 형식을 사용하는지 여부를 나타냅니다. 자세한 내용은 WMI 데이터 공급자로 등록을 참조하세요.