Escritura de un proveedor de asociaciones para la interoperabilidad
Un proveedor de asociaciones proporciona un mecanismo para registrar perfiles y asociarlos a perfiles que se implementan en diferentes espacios de nombres.
Los proveedores de asociaciones se usan para exponer perfiles estándar, como un perfil de energía. Esto se logra escribiendo un proveedor de asociaciones en el espacio de nombres root/interop que expone instancias de asociación mediante la implementación de una clase, que se deriva de CIM_RegisteredProfile. El proveedor debe estar registrado tanto en el espacio de nombres root/interop como en root/<implemented> para permitir el recorrido entre espacios de nombres.
Instrumental de administración de Windows (WMI) carga el proveedor de asociaciones cada vez que se ejecuta una consulta de asociación en el espacio de nombres root/interop.
Para implementar un proveedor de asociaciones para la interoperabilidad
Derive una clase de CIM_RegisteredProfile y cree una instancia estática de esta clase derivada en el espacio de nombres root\interop. Como mínimo, las propiedades siguientes deben propagarse con valores válidos:
Aunque InstanceID define de forma única la instancia de CIM_RegisteredProfile, la combinación de RegisteredName, RegisteredOrganization y RegisteredVersion debe identificar de forma única el perfil registrado dentro del ámbito de la organización. Para obtener más información sobre las propiedades individuales, vea CIM_RegisteredProfile.
En el ejemplo de código siguiente se describe la sintaxis para derivar la clase ProcessProfile de CIM_RegisteredProfile y rellenar la instancia estática.
class ProcessProfile : CIM_RegisteredProfile { }; instance of ProcessProfile as $PP { InstanceID = "Process"; RegisteredName = "Process"; RegisteredOrganization = "1"; // Set to "Other" OtherRegisteredOrganization = "Microsoft"; RegisteredVersion = "1.0"; };
Nota
Para los clientes de Windows, la propiedad RegisteredOrganization debe establecerse en 1 y la propiedad OtherRegisteredOrganization en "Microsoft".
Cree un proveedor que devuelva instancias de asociación de CIM_ElementConformsToProfile. Se trata de un proceso de dos pasos.
Cree una clase derivada de CIM_ElementConformsToProfile en los espacios de nombres de interoperabilidad e implementación. Dado que los distintos proveedores pueden implementar el mismo perfil, el nombre de la clase debe ser único. La convención de nomenclatura recomendada es "<Organización>_<NombreProducto>_<NombreClase>_<Versión>". La propiedad ConformantStandard o ManagedElement deben especificar el calificador MSFT_TargetNamespace que contiene el espacio de nombres al que pertenece esta clase.
En el ejemplo de código siguiente se describe la sintaxis para derivar la clase Microsoft_Process_ElementConformsToProfile_v1 de CIM_ElementConformsToProfile en el espacio de nombres root\interop. En este ejemplo, el elemento administrado Win32_Process hace referencia al espacio de nombres root\cimv2 mediante el calificador 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; };
En el ejemplo de código siguiente se describe la sintaxis para derivar la clase Microsoft_Process_ElementConformsToProfile_v1 de CIM_ElementConformsToProfile en el espacio de nombres root\cimv2. En este ejemplo, el estándar CIM_RegisteredProfile hace referencia al espacio de nombres root\interop mediante el calificador 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; };
Si no se especifica el calificador MSFT_TargetNamespace en la propiedad que hace referencia al espacio de nombres implementado, el filtro ResultClass de la instrucción "Associators of"no funcionará. Por ejemplo, si no se especifica el calificador MSFT_TargetNamespace, la siguiente línea de comandos de Windows PowerShell no devolverá un objeto: get-wmiobject -query "associators of {ProcessProfile.InstanceID='Process'} where resultclass='Win32_Process'".
El calificador MSFT_TargetNamespace no puede apuntar a un espacio de nombres en un equipo remoto. Por ejemplo, no se admite el siguiente espacio de nombres: MSFT_TargetNamespace(\\\\<RemoteMachine>\\root\\interop).
Escriba un proveedor que devuelva instancias de la clase derivada creada. Para obtener más información, consulte Escritura de un proveedor de instancias. Al acceder a instancias entre espacios de nombres, es posible que tenga que acceder a los niveles de seguridad para el cliente. Para obtener más información, consulte Suplantación de un cliente.
El proveedor de asociaciones debe implementar los métodos IWbemServices.CreateInstanceEnumAsync e IWbemServices.GetObjectAsync. La implementación del método IWbemServices.ExecQueryAsync es opcional. Dado que se puede tener acceso a este proveedor desde los espacios de nombres root\interop y root\<implemented>, no debe haber una dependencia explícita en un espacio de nombres dentro del proveedor.
Registre el proveedor de asociaciones en los espacios de nombres root\interop y root\<implemented>. Para obtener más información, consulte Registro de un proveedor de instancias.
En el ejemplo de código siguiente se describe la sintaxis para registrar el proveedor de asociaciones en el espacio de nombres 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; };
En el ejemplo de código siguiente se describe la sintaxis para registrar el proveedor de asociaciones en el espacio de nombres 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; };
Coloque el esquema de CIM_ElementConformsToProfile en el espacio de nombres implementado. Para los clientes de Windows, este es el archivo interop.mof que se encuentra en la carpeta %systemroot%\system32\wbem.
Implemente la interfaz IWbemProviderInit para el proveedor.
WMI usa IWbemProviderInit para cargar e inicializar un proveedor. El método IWbemProviderInit.Initialize debe implementarse de forma que se le pueda llamar para dos espacios de nombres diferentes. Para más información, consulte Inicialización de un proveedor.
Temas relacionados