다음을 통해 공유


WMI 인스턴스 이름 정의

WMI 블록의 인스턴스 특정 물리적 디바이스 또는 소프트웨어 구성 요소에서 제공하는 데이터를 포함합니다. 블록의 GUID가 블록을 고유하게 식별하는 것처럼 인스턴스의 이름은 블록의 해당 인스턴스를 고유하게 식별합니다. WMI 클라이언트 애플리케이션은 인스턴스 이름을 사용하여 데이터 블록에 반환된 정보를 데이터를 제공한 디바이스 또는 구성 요소와 연결합니다. WMI는 인스턴스 이름을 사용하여 요청을 보내야 하는 디바이스를 결정합니다. 드라이버는 인스턴스 이름을 정의할 때 해당 PDO를 사용하는 것이 좋습니다.

드라이버는 다음 두 가지 방법 중 하나를 사용하여 블록에 대한 인스턴스 이름을 정의할 수 있습니다.

  • 드라이버는 블록을 등록할 때 정적 인스턴스 이름 목록을 WMI에 전달합니다.

    블록이 등록되면 드라이버와 WMI 모두 이 목록에 인덱스로 인스턴스 이름을 지정합니다. 정적 인스턴스 이름은 드라이버 PDO의 디바이스 인스턴스 ID 또는 드라이버 정의 기본 이름을 기반으로 할 수 있습니다. 또는 드라이버가 인스턴스 이름 문자열 목록을 정의할 수 있습니다. 정적 인스턴스 이름은 드라이버가 블록을 다시 등록하여 명시적으로 변경할 때까지 유지됩니다.

  • 드라이버는 인스턴스를 만들 때 동적 인스턴스 이름을 생성합니다.

    드라이버는 블록을 등록할 때 블록에 대한 동적 인스턴스 이름을 생성한다는 것을 나타냅니다. 블록이 등록되면 드라이버와 WMI는 모두 Parameters.WMI.Buffer버퍼의 문자열로 동적 인스턴스 이름을 전달합니다.

드라이버는 런타임에 데이터 블록의 인스턴스 또는 인스턴스 이름이 자주 변경되는 경우에만 동적 인스턴스 이름을 생성해야 합니다. 예를 들어 드라이버는 프로세스 ID 또는 TCP/IP 연결의 IP 주소를 인스턴스 이름으로 사용할 수 있습니다. 이러한 인스턴스 이름은 동적이어야 합니다. 정적이면 변경이 발생할 때마다 IoWMIRegistrationControl 호출하여 인스턴스의 수와 이름을 업데이트해야 하므로 드라이버에 상당한 오버헤드가 발생합니다.

대부분의 경우 정적 인스턴스 이름은 다음과 같은 이유로 동적 인스턴스 이름보다 선호됩니다.

  • 정적 인스턴스 이름은 드라이버가 동적 인스턴스 이름의 경우처럼 WMI 요청에 대한 응답으로 인스턴스 이름 문자열을 반환할 필요가 없기 때문에 드라이버의 성능을 향상시킵니다.

  • WMI는 등록 시 정적 인스턴스 이름 충돌을 감지하고 필요한 경우 인스턴스 이름을 자동으로 수정하여 블록을 등록하는 드라이버 수에 관계없이 모든 인스턴스 이름이 지정된 블록에 대해 고유하게 지정되도록 할 수 있습니다.

    WMI는 동적 인스턴스 이름에 대한 인스턴스 이름 충돌을 검색할 수 없으므로 드라이버는 IoWMIAllocateInstanceIds사용하여 고유한 이름을 생성합니다.

  • 드라이버는 WMI 라이브러리 루틴을 사용하여 드라이버의 PDO 또는 드라이버 정의 기본 이름을 기반으로 하는 한 정적 인스턴스 이름을 사용하는 블록에 대한 IRP를 처리할 수 있습니다.

    드라이버는 WMI 라이브러리 루틴을 사용하여 동적 인스턴스 이름을 사용하는 데이터 블록에 대한 IRP를 처리할 수 없습니다.

드라이버는 블록을 등록할 때, WMI에 전달하는 WMIREGGUID 또는 WMIGUIDREGINFO 구조에서 WMIREG_FLAG_XXX을 설정하거나 지워서 블록이 정적 또는 동적 인스턴스 이름을 사용하는지와 사용되는 정적 인스턴스 이름의 유형을 표시합니다. 자세한 내용은 WMI 데이터 공급자등록을 참조하세요.