Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поставщик ассоциаций предоставляет механизм регистрации профилей и связывания их с профилями, реализованными в разных пространствах имен.
Поставщики ассоциаций используются для предоставления стандартных профилей, таких как энергетический профиль. Это достигается путем написания поставщика ассоциаций в пространстве имен root/interop, который предоставляет экземпляры ассоциации путем реализации класса, производного от CIM_RegisteredProfile. Поставщик должен быть зарегистрирован как в корневом/interop пространстве имен, так и в корневом/<реализованном> пространстве имен для поддержки обхода между пространствами имен.
Инструментарий управления Windows (WMI) загружает поставщика ассоциаций всякий раз, когда запрос ассоциации выполняется в пространстве имен root/interop.
Реализация поставщика ассоциаций для взаимодействия
Создайте производный класс на основе 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 в пространствах имен взаимодействия и реализации. Так как один и тот же профиль может быть реализован различными поставщиками, имя класса должно быть уникальным. Рекомендуемое соглашение об именовании — "<организация>_<НазваниеПродукта>_<НазваниеКласса>_<Версия>". Свойство 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 "ассоциаторы {ProcessProfile.InstanceID='Process'}, где resultclass='Win32_Process'".
Квалификатор MSFT_TargetNamespace не может указывать на пространство имен на удаленном компьютере. Например, следующее пространство имен не поддерживается: MSFT_TargetNamespace(\\\\<RemoteMachine>\\root\\interop).
Напишите функцию, которая возвращает экземпляры создаваемого производного класса. Для получения дополнительной информации см. создание поставщика экземпляров. При доступе к экземплярам между пространствами имен может потребоваться доступ к уровням безопасности для клиента. Дополнительные сведения см. в статье олицетворение клиента.
Поставщик ассоциаций должен реализовать методы IWbemServices.CreateInstanceEnumAsync и должен реализовать методы IWbemServices.GetObjectAsync. Реализация метода IWbemServices.ExecQueryAsync является необязательным. Так как к этому поставщику можно получить доступ как из root\interop, так и из root\<реализовано>, не должно быть явной зависимости от пространства имен внутри поставщика.
Зарегистрируйте поставщика ассоциаций как в корневом пространстве имен \взаимодействий, так и в корневом\пространстве имен<, реализованных в>. Дополнительные сведения см. в разделе Регистрация поставщика экземпляров.
В следующем примере кода описывается синтаксис для регистрации поставщика ассоциаций в пространстве имен 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 должен быть реализован таким образом, чтобы его можно было вызывать для двух разных пространств имен. Для получения дополнительной информации см. Инициализация провайдера.
Связанные разделы