Написание поставщика связей для взаимодействия
Поставщик связей предоставляет механизм для регистрации профилей и связывания их с профилями, реализованными в разных пространствах имен.
Поставщики связей используются для предоставления стандартных профилей, таких как профиль питания. Это достигается путем записи поставщика связей в корневом пространстве имен или пространстве имен взаимодействия, который предоставляет экземпляры ассоциации путем реализации класса, который является производным от CIM_RegisteredProfile. Поставщик должен быть зарегистрирован как в корневом, так и в корневом или< реализованном> пространстве имен для поддержки обхода между пространствами имен.
Инструментарий управления Windows (WMI) загружает поставщик сопоставлений всякий раз, когда запрос на связь выполняется в корневом пространстве имен или пространстве имен взаимодействия.
Реализация поставщика связей для взаимодействия
Наследуйте класс от 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.
Создайте поставщика, который возвращает экземпляры связи CIM_ElementConformsToProfile. Этот процесс состоит из двух шагов.
Создайте класс, производный от 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).
Напишите поставщик, возвращающий экземпляры созданного производного класса. Дополнительные сведения см. в статье Запись поставщика экземпляров. При доступе к экземплярам пространства имен может потребоваться доступ к уровням безопасности клиента. Дополнительные сведения см. в разделе Олицетворение клиента.
Поставщик связей должен реализовывать методы IWbemServices.CreateInstanceEnumAsync и IWbemServices.GetObjectAsync . Реализация метода IWbemServices.ExecQueryAsync необязательна. Так как доступ к этому поставщику можно получить как из пространств имен root\interop, так и из корневого\<реализованного> пространства имен, не должно быть явной зависимости от пространства имен внутри поставщика.
Зарегистрируйте поставщик связей в пространствах имен 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; };
Поместите схему для CIM_ElementConformsToProfile в реализованное пространство имен. Для клиентов Windows это файл interop.mof, расположенный в папке %systemroot%\system32\wbem.
Реализуйте интерфейс IWbemProviderInit для поставщика.
WMI использует IWbemProviderInit для загрузки и инициализации поставщика. Метод IWbemProviderInit.Initialize должен быть реализован таким образом, чтобы его можно было вызывать для двух разных пространств имен. Дополнительные сведения см. в разделе Инициализация поставщика.
Связанные темы