Registrar un proveedor de clases

Para crear un proveedor de clase de WMI, debe registrar la instancia de __Win32Provider que representa al proveedor mediante una instancia de __ClassProviderRegistration. Como objeto COM, el proveedor debe registrarse con el sistema operativo y con WMI. En el procedimiento siguiente se supone que ya ha implementado el proceso de registro como se describe en Registrar un proveedor. Si el proveedor almacena la mayoría de los datos en el repositorio de WMI y esos datos solo se actualizan en cuando se inicia, registre la clase como proveedor de clases de inserción. Si los datos que proporciona cambian con frecuencia y se recuperan dinámicamente mediante el código en cada solicitud de WMI, registre el proveedor como proveedor de clases de extracción.

En el procedimiento siguiente se describe cómo registrar un proveedor de clase de inserción.

Para registrar un proveedor de clases de inserción

En el procedimiento siguiente se describe cómo registrar un proveedor de clase de extracción.

Para registrar un proveedor de clases de extracción

  1. Cree una instancia de la clase __Win32Provider que describa el proveedor.

  2. Cree una instancia de la clase __ClassProviderRegistration que describa el conjunto de características del proveedor.

    Dentro de la instancia __ClassProviderRegistration:

    1. Establezca la propiedad InteractionType para indicar si el proveedor es un proveedor de inserción o de extracción.

    2. Etiquete la clase con los calificadores Dynamic y Provider.

      El calificador Dynamic indica que WMI debe usar un proveedor para recuperar las instancias de clase. El calificador Provider especifica el nombre del proveedor que debe usar WMI.

    3. Defina las propiedades ResultSetQueries, ReferencedSetQueries y UnsupportedQueries.

      Estas propiedades de consulta describen información detallada sobre la clase admitida.

Además de describir los distintos métodos admitidos de una clase, la clase __ClassProviderRegistration también tiene tres propiedades que describen una serie de consultas. Cuando se usan juntos, estas tres propiedades describen el intervalo completo de clases proporcionadas por el proveedor de clases. Cada propiedad de consulta contiene una instrucción SELECT de WQL, denominada "consulta de esquema", para especificar los tipos de clases admitidas. Las consultas de esquema especifican un nombre de clase especial denominado meta_class. En la siguiente tabla se enumeran las propiedades de consulta.

Propiedad Descripción
ResultSetQueries Contiene información sobre el conjunto de resultados que proporciona el proveedor. WMI usa la información para determinar si se debe invocar al proveedor para satisfacer una consulta de una aplicación. Esta propiedad describe el conjunto de todas las clases que el proveedor puede proporcionar o un superconjunto de las clases disponibles, pero nunca un subconjunto. WMI requiere que un proveedor especifique al menos una consulta en esta propiedad.
En el ejemplo siguiente se muestra cómo establecer ResultSetQueries cuando un proveedor proporciona una clase de asociación que hace referencia a la clase Win32_LogicalDisk.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
En el ejemplo siguiente se muestra cómo especificar una consulta general cuando un proveedor proporciona clases que hacen referencia a otras clases desconocidas.
SELECT * FROM meta_class
En el ejemplo siguiente se muestra cómo establecer ResultSetQueries cuando un proveedor proporciona solo subclases, pero no la clase primaria de una clase determinada.
SELECT * FROM meta_class WHERE __Dynasty = "MyClass"
En el ejemplo siguiente se muestra cómo usar la propiedad __this especial y establecer ResultSetQueries cuando un proveedor proporciona todas las clases y subclases.
SELECT * FROM meta_class WHERE __this ISA "MyClass"
ReferencedSetQueries Determina si se omite el proveedor en las consultas de esquema en las que se solicitan asociaciones y referencias. Los proveedores que pueden proporcionar clases de asociación deben incluir al menos una consulta en su propiedad ReferencedSetQueries .
UnsupportedQueries Contiene información sobre el conjunto de resultados que un proveedor de clases no proporciona. WMI usa esta propiedad para restar del conjunto de clases implícitas por ResultSetQueries. Por ejemplo, un proveedor de clases puede especificar en la compatibilidad con ResultSetQueries para todas las clases derivadas de MyClass y especificar en UnsupportedQueries una falta de compatibilidad con una clase derivada determinada.
Cuanto más información pueda registrar un proveedor sobre sus funcionalidades de procesamiento de consultas, más rápido se ejecute. Escribir una o varias consultas en la propiedad UnsupportedQueries es una manera de ser específica y es especialmente importante cuando un proveedor se basa en una clase que no proporciona. Cuando se realiza una solicitud para una clase que aparece en una consulta en la propiedad UnsupportedQueries , WMI puede proporcionar la propia clase o invocar un proveedor alternativo para suministrarla.

Dado que WMI no admite la cláusula OR, debe crear una consulta independiente para cada clase.

Las consultas siguientes se especifican en ResultSetQueries cuando un proveedor de clases proporciona MyClass1, MyClass2 y MyClass3.

SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"

Solo los administradores pueden registrar o eliminar un proveedor creando una instancia de __Win32Provider y __ClassProviderRegistration.