Инициализация поддержки WMI в драйвере

[Относится только к KMDF]

Для поддержки блоков данных WMI драйвер на основе платформы:

  • Регистрирует имена ресурсов формата управляемых объектов (MOF) любых настраиваемых поставщиков данных WMI, которые не определены в Wmicore.mof.

  • Создает один или несколько объектов экземпляра WMI для представления блоков данных, которые он может считывать или записывать.

  • При необходимости реализует одну или несколько функций обратного вызова событий для предоставления данных WMI, которые предоставляет драйвер.

  • Зарегистрируйте каждый объект экземпляра WMI, чтобы сделать его доступным для клиентов WMI.

Чтобы инициализировать поддержку WMI, драйвер KMDF выполняет следующие действия, как правило, в рамках обратного вызова EvtDriverDeviceAdd или EvtDeviceSelfManagedIoInit :

  1. Драйвер, предоставляющий MOF-файл для поддержки настраиваемых поставщиков данных WMI, должен вызвать метод WdfDeviceAssignMofResourceName , чтобы зарегистрировать имя ресурса MOF, прежде чем драйвер создаст объекты поставщика WMI, представляющие поставщика данных.

  2. Инициализируйте структуру конфигурации поставщика WMI и при необходимости создайте объект поставщика WMI (WDFWMIPROVIDER).

  3. Инициализируйте структуру конфигурации экземпляра WMI и создайте объект экземпляра WMI (WDFWMIINSTANCE).

Платформа создает поставщик WMI по умолчанию, когда драйвер KMDF создает свой первый экземпляр WMI. Поэтому, если драйверу требуется только один поставщик WMI, вызывать метод создания поставщика (WdfWmiProviderCreate) не требуется. Однако драйвер должен заполнить структуру конфигурации поставщика, так как эта структура предоставляет сведения о поставщике, который платформа использует при создании экземпляра.

Если драйвер создает один экземпляр каждого блока данных WMI, который он поддерживает, драйвер вызывает WdfWmiInstanceCreate, передавая структуру WDF_WMI_PROVIDER_CONFIG и структуру WDF_WMI_INSTANCE_CONFIG . Этот одиночный вызов настраивает предоставленный платформой объект поставщика WMI и создает объект экземпляра WMI.

Если драйвер создает несколько экземпляров своих блоков данных WMI, драйвер должен вызывать как WdfWmiProviderCreate, так и WdfWmiInstanceCreate.

Регистрация экземпляров поставщика

Прежде чем клиенты WMI смогут получить доступ к блокам данных WMI драйвера, драйвер должен зарегистрировать экземпляры поставщика в системной службе WMI. Драйвер может использовать один из следующих методов для регистрации экземпляра поставщика:

  • Задайте для свойства Register member структуры WDF_WMI_INSTANCE_CONFIG экземпляра поставщика значение TRUE.

    Если драйвер задает для параметра Register значение TRUE, платформа автоматически регистрирует экземпляр при первом переходе устройства в рабочее (D0) состояние.

  • Вызовите метод WdfWmiInstanceRegister .

    Если драйвер вызывает WdfWmiInstanceRegister после вызова WdfWmiInstanceCreate, платформа регистрирует экземпляр после того, как устройство находится в рабочем (D0) состоянии.

Платформа автоматически отменяет регистрацию каждого экземпляра поставщика при удалении устройства экземпляра (и перед вызовом функции обратного вызова события EvtDeviceSelfManagedIoCleanup ). Сведения о порядке, в котором платформа вызывает функции обратного вызова драйвера, см. в разделе Сценарии PnP и управления питанием.

Драйвер может отменить регистрацию экземпляра в любое время, вызвав WdfWmiInstanceDeregister.