다음을 통해 공유


드라이버에서 WMI 지원을 초기화하기

[KMDF에만 적용]

WMI 데이터 블록을 지원하려면 프레임워크 기반 드라이버:

  • Wmicore.mof에 정의되지 않은 사용자 지정 WMI 데이터 공급자의 관리 개체 형식(MOF) 리소스 이름을 등록합니다.

  • 하나 이상의 WMI 인스턴스 개체를 만들어 읽거나 쓸 수 있는 데이터 블록을 나타냅니다.

  • 필요에 따라 드라이버가 제공하는 WMI 데이터를 제공하기 위해 하나 이상의 이벤트 콜백 함수를 구현합니다.

  • 각 WMI 인스턴스 개체를 등록하여 WMI 클라이언트에서 사용할 수 있도록 합니다.

WMI 지원을 초기화하기 위해 KMDF 드라이버는 일반적으로 EvtDriverDeviceAdd 또는 EvtDeviceSelfManagedIoInit 콜백 내에서 다음 단계를 수행합니다.

  1. 사용자 지정된 WMI 데이터 공급자를 지원하는 MOF 파일을 제공하는 드라이버는 드라이버가 데이터 공급자를 나타내는 WMI 공급자 개체를 만들기 전에 WdfDeviceAssignMofResourceName 메서드를 호출하여 MOF 리소스 이름을 등록해야 합니다.

  2. WMI 공급자 구성 구조를 초기화하고 필요에 따라 WDFWMIPROVIDER(WMI 공급자 개체)를 만듭니다.

  3. WMI 인스턴스 구성 구조를 초기화하고 WDFWMIINSTANCE 인스턴스 개체를 만듭니다.

프레임워크는 KMDF 드라이버가 첫 번째 WMI 인스턴스를 만들 때 기본적으로 WMI 공급자를 만듭니다. 따라서 드라이버에 WMI 공급자가 하나만 필요한 경우 공급자 생성 메서드(WdfWmiProviderCreate)를 호출할 필요가 없습니다. 그러나 이 구조는 프레임워크가 인스턴스를 만들 때 사용하는 공급자에 대한 정보를 제공하므로 드라이버는 공급자 구성 구조를 채워야 합니다.

드라이버가 지원하는 각 WMI 데이터 블록의 단일 인스턴스를 만드는 경우 드라이버는 WdfWmiInstanceCreate호출하여 WDF_WMI_PROVIDER_CONFIG 구조체와 WDF_WMI_INSTANCE_CONFIG 구조를 모두 전달합니다. 이 단일 호출은 둘 다 단일 프레임워크 제공 WMI 공급자 개체를 구성하고 WMI 인스턴스 개체를 만듭니다.

드라이버가 WMI 데이터 블록의 여러 인스턴스를 만드는 경우 드라이버는 WdfWmiProviderCreateWdfWmiInstanceCreate 모두 호출해야

공급자 인스턴스 등록

WMI 클라이언트가 드라이버의 WMI 데이터 블록에 액세스하려면 먼저 드라이버가 해당 공급자 인스턴스를 시스템의 WMI 서비스에 등록해야 합니다. 드라이버는 다음 기술 중 하나를 사용하여 공급자 인스턴스를 등록할 수 있습니다.

  • 공급자 인스턴스의 WDF_WMI_INSTANCE_CONFIG 구조의 Register 멤버를 TRUE 설정합니다.

    드라이버가 RegisterTRUE으로 설정하면, 프레임워크는 디바이스가 작동(D0) 상태에 처음 들어갈 때 인스턴스를 자동으로 등록합니다.

  • WdfWmiInstanceRegister 메서드를 호출합니다.

    WdfWmiInstanceCreate호출한 후 드라이버가 WdfWmiInstanceRegister 호출하는 경우 프레임워크는 디바이스가 작동 중(D0) 상태인 후 인스턴스를 등록합니다.

프레임워크는 인스턴스의 디바이스가 제거될 때(그리고 EvtDeviceSelfManagedIoCleanup 이벤트 콜백 함수를 호출하기 전에) 각 공급자 인스턴스의 등록을 자동으로 취소합니다. 프레임워크가 드라이버의 콜백 함수를 호출하는 순서에 대한 자세한 내용은 PnP 및 전원 관리 시나리오참조하세요.

드라이버는 WdfWmiInstanceDeregister호출하여 언제든지 인스턴스 등록을 취소할 수 있습니다.