Поделиться через


Написание поставщика связей для взаимодействия

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

Поставщики связей используются для предоставления стандартных профилей, таких как профиль питания. Это достигается путем записи поставщика связей в корневом пространстве имен или пространстве имен взаимодействия, который предоставляет экземпляры ассоциации путем реализации класса, который является производным от CIM_RegisteredProfile. Поставщик должен быть зарегистрирован как в корневом, так и в корневом или< реализованном> пространстве имен для поддержки обхода между пространствами имен.

Инструментарий управления Windows (WMI) загружает поставщик сопоставлений всякий раз, когда запрос на связь выполняется в корневом пространстве имен или пространстве имен взаимодействия.

Реализация поставщика связей для взаимодействия

  1. Наследуйте класс от CIM_RegisteredProfile и создайте статический экземпляр этого производного класса в пространстве имен root\interop. Как минимум, следующие свойства должны распространяться с допустимыми значениями:

    Несмотря на то, что InstanceID уникальным образом определяет экземпляр CIM_RegisteredProfile, сочетание RegisteredName, RegisteredOrganization и RegisteredVersion должно однозначно идентифицировать зарегистрированный профиль в область организации. Дополнительные сведения об отдельных свойствах см. в разделе CIM_RegisteredProfile.

    В следующем примере кода описывается синтаксис для наследования класса ProcessProfile от CIM_RegisteredProfile и заполнения статического экземпляра.

    class ProcessProfile : CIM_RegisteredProfile
    {
    };
    
    instance of ProcessProfile as $PP
    {
         InstanceID = "Process";
         RegisteredName = "Process";
         RegisteredOrganization = "1"; // Set to "Other"
         OtherRegisteredOrganization = "Microsoft";
         RegisteredVersion = "1.0";
    };
    

    Примечание

    Для клиентов Windows свойство RegisteredOrganization должно иметь значение 1, а для свойства OtherRegisteredOrganization — значение Microsoft.

     

  2. Создайте поставщика, который возвращает экземпляры связи CIM_ElementConformsToProfile. Этот процесс состоит из двух шагов.

    1. Создайте класс, производный от CIM_ElementConformsToProfile в пространствах имен взаимодействия и реализации. Так как один и тот же профиль может быть реализован разными поставщиками, имя класса должно быть уникальным. Рекомендуемое соглашение об именовании — "Organization_ProductName>_<ClassName>_<Version>".<>< Свойство ConformantStandard или ManagedElement должно указывать квалификатор MSFT_TargetNamespace , содержащий пространство имен, к которому принадлежит этот класс.

      В следующем примере кода описывается синтаксис для наследования класса Microsoft_Process_ElementConformsToProfile_v1 от CIM_ElementConformsToProfile в пространстве имен root\interop. В этом примере управляемый элемент Win32_Process ссылается на пространство имен root\cimv2 с помощью квалификатора MSFT_TargetNamespace .

      #pragma namespace("\\\\.\\root\\interop")
      [Provider("ProcessAssociation"),Dynamic]
      Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile
      {
           CIM_RegisteredProfile ref ConformantStandard = $PP;
           [MSFT_TargetNamespace("root\\cimv2")]Win32_process ref ManagedElement = null;
      };
      

      В следующем примере кода описывается синтаксис для наследования класса Microsoft_Process_ElementConformsToProfile_v1 от CIM_ElementConformsToProfile в пространстве имен root\cimv2. В этом примере соответствующий CIM_RegisteredProfile стандарт ссылается на пространство имен root\interop с помощью квалификатора MSFT_TargetNamespace .

      #pragma namespace("\\\\.\\root\\cimv2")
      [Provider("ProcessAssociation"),Dynamic]
      Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile
      {
           [MSFT_TargetNamespace("root\\interop")] CIM_RegisteredProfile ref ConformantStandard = $PP;
           Win32_process ref ManagedElement = null;
      };
      

      Если квалификатор MSFT_TargetNamespace не указан в свойстве, ссылающемся на реализованное пространство имен, фильтр ResultClass оператора "Associators of" не будет работать. Например, если квалификатор MSFT_TargetNamespace не указан, следующий Windows PowerShell командной строке не вернет объект: get-wmiobject -query "associators of {ProcessProfile.InstanceID='Process'} where resultclass='Win32_Process'".

      Квалификатор MSFT_TargetNamespace не может указывать на пространство имен на удаленном компьютере. Например, не поддерживается следующее пространство имен: MSFT_TargetNamespace(\\\<\RemoteMachine>\\root\\interop).

    2. Напишите поставщик, возвращающий экземпляры созданного производного класса. Дополнительные сведения см. в статье Запись поставщика экземпляров. При доступе к экземплярам пространства имен может потребоваться доступ к уровням безопасности клиента. Дополнительные сведения см. в разделе Олицетворение клиента.

      Поставщик связей должен реализовывать методы IWbemServices.CreateInstanceEnumAsync и IWbemServices.GetObjectAsync . Реализация метода IWbemServices.ExecQueryAsync необязательна. Так как доступ к этому поставщику можно получить как из пространств имен root\interop, так и из корневого\<реализованного> пространства имен, не должно быть явной зависимости от пространства имен внутри поставщика.

  3. Зарегистрируйте поставщик связей в пространствах имен root\interop и root\<implemented> . Дополнительные сведения см. в разделе Регистрация поставщика экземпляров.

    В следующем примере кода описывается синтаксис для регистрации поставщика связей в пространстве имен root\interop.

    #pragma namespace("\\\\.\\root\\interop")
    instance of __Win32Provider as $P
    {
        Name    = "ProcessAssociation" ;
        ClsId   = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}";
    } ;
    
    instance of __InstanceProviderRegistration
    {
        Provider = $P;
        SupportsPut = false;
        SupportsGet = TRUE;
        SupportsDelete = false;
        SupportsEnumeration = TRUE;
    };
    

    В следующем примере кода описывается синтаксис для регистрации поставщика связей в пространстве имен root\cimv2.

    #pragma namespace("\\\\.\\root\\cimv2")
    instance of __Win32Provider as $R
    {
        Name    = "ProcessAssociation" ;
        ClsId   = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}";
    } ;
    
    instance of __InstanceProviderRegistration
    {
        Provider = $R;
        SupportsPut = false;
        SupportsGet = TRUE;
        SupportsDelete = false;
        SupportsEnumeration = TRUE;
    };
    
  4. Поместите схему для CIM_ElementConformsToProfile в реализованное пространство имен. Для клиентов Windows это файл interop.mof, расположенный в папке %systemroot%\system32\wbem.

  5. Реализуйте интерфейс IWbemProviderInit для поставщика.

    WMI использует IWbemProviderInit для загрузки и инициализации поставщика. Метод IWbemProviderInit.Initialize должен быть реализован таким образом, чтобы его можно было вызывать для двух разных пространств имен. Дополнительные сведения см. в разделе Инициализация поставщика.

CIM_ElementConformsToProfile

CIM_RegisteredProfile

Написание поставщика экземпляров

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