Suministro de datos a WMI

WMI hace que los datos sobre objetos administrables de Windows estén disponibles mediante proveedores WMI. Un proveedor recupera datos de un componente del sistema, como un proceso o una aplicación instrumentada, como SNMP o IIS, y pasa esos datos a través de WMI a una aplicación de administración. Por ejemplo, cuando una aplicación o script solicita información de proceso mediante la clase Win32_Process de WMI, los datos se obtienen dinámicamente a través de un proveedor preinstalado.

En este tema se describen las secciones siguientes:

Creación de un modelo para un objeto administrable

Antes de desarrollar un proveedor, cree un modelo de datos para representar el objeto administrable que se expondrá a través de WMI. Planea qué objetos de datos expondrá el proveedor. Por ejemplo, si tiene previsto administrar la resolución de pantalla del fondo del escritorio, deberá decidir cómo modelar el escritorio en un archivo Formato de objeto administrado (MOF).

Para crear un modelo útil:

  • Determine escenarios reales y modele la información que un cliente puede querer leer y actualizar (por ejemplo, cambiar la imagen de fondo) para cada objeto administrable. Estas son las propiedades de la clase.
  • Determine qué tipo de acciones puede querer realizar un cliente con cada objeto administrable. Estos son los métodos.

Implementación de un modelo para un objeto administrable

Para implementar un modelo para objetos administrables, cree un archivo MOF que contenga una clase WMI que represente cada objeto. Para obtener más información sobre cómo crear un archivo MOF para definir clases WMI, vea Diseñar clases de formato de objeto administrado (MOF). El registro del proveedor y sus clases normalmente se incluyen en el archivo MOF, aunque es posible usar la API de COM para crear clases y métodos. Para obtener más información, vea Desarrollo de un proveedor WMI.

Nota

Para asegurarse de que todas las definiciones de clase WMI para objetos administrados se restauran en el repositorio WMI si WMI tiene un error y se reinicia, use la instrucción de preprocesador de autorrecuperación #pragma en el archivo Managed Object Format (MOF).

 

Después de crear el archivo MOF, compile con la herramienta Mofcomp.exe. Esto le notifica errores en el archivo MOF y agrega la clase WMI definida en el archivo MOF al repositorio WMI para que un proveedor pueda usar la clase.

Determinación de un tipo de proveedor que se va a implementar

WMI admite un determinado número de tipos de proveedor, que determina la naturaleza de la información entregada y las operaciones admitidas por los proveedores.

Los tipos de proveedor son:

La gran mayoría de los proveedores son proveedores de instancias y proveedores de métodos. Un proveedor de instancias es el proveedor más común y proporciona las instancias de una clase determinada. Un proveedor de métodos implementa los métodos de una o varias clases. Para obtener más información sobre los tipos de proveedores, consulte Desarrollo de un proveedor WMI.

Determinación de un modelo de hospedaje (implementación) para un proveedor

Los proveedores WMI son archivos binarios implementados como objetos COM. Esto significa que cada proveedor tiene un archivo DLL que se puede ejecutar dentro de un proceso y contexto de seguridad específicos. Esto es lo que WMI denomina modelo de hospedaje. WMI ofrece varias maneras de hospedar proveedores, pero el enfoque más común es usar el modelo de proveedor acoplado (que se ejecuta en el proceso WMI) en el contexto de seguridad NetworkServiceHost. Un proveedor WMI se puede clasificar como acoplado o desacoplado.

El término proveedor acoplado o desacoplado determina en qué proceso de hospedaje se ejecuta el proveedor con respecto al proceso de WMIPRVSE.EXE proporcionado por WMI. Un procedimiento recomendado es determinar si los datos de administración que expone el proveedor y la API o la aplicación en las que se basa siempre están disponibles en el sistema o no. Si la API o la aplicación en la que se basa el proveedor siempre está disponible (que se ejecuta en el sistema), el proveedor debe ser un proveedor acoplado, si no es así, debe ser un proveedor desacoplado. Para obtener más información sobre los modelos de hospedaje, consulte Hospedaje y seguridad del proveedor.

Para obtener más información sobre la creación de un proveedor acoplado, consulte Suministro de datos a WMI mediante la escritura de un proveedor y para obtener información sobre cómo incorporar un proveedor desacoplado en una aplicación, consulte Incorporación de un proveedor en una aplicación.

Los proveedores acoplados se pueden describir como en proceso (en proceso) o fuera de proceso (fuera de proceso). Cuando un proveedor acoplado es un proveedor en proceso, se ejecuta en un proceso de hospedaje de WMI compartido WMIPRVSE.EXE y se implementa como un servidor COM en proceso (.dll). Cuando un proveedor es un proveedor fuera de proceso, WMI lo inicia a petición de un cliente o evento, pero se ejecuta como un proceso independiente y se implementa como ejecutable (.exe).

Implementación de un proveedor

Un proveedor se puede implementar de las siguientes maneras:

  • Uso del Asistente ATL en Visual Studio.

    El Asistente ATL genera código de proveedor que implementa un proveedor acoplado. Al usar el Asistente ATL, puede especificar que desea crear un modelo en tiempo de ejecución (.dll) o fuera de proceso (.exe).

  • Definición de un objeto COM que contenga el proveedor.

    El código de proveedor se escribe en C++. Para obtener más información, vea Suministro de datos a WMI mediante la escritura de un proveedor.

  • Con las clases del espacio de nombres Microsoft.Management.Infrastructure de .NET Framework para crear un proveedor mediante código administrado. (El espacio de nombres System.Management.Instrumentation ya no se admite).

    Este proceso crea un proveedor desacoplado.

Registro de un proveedor con WMI y el sistema

Antes de usar el proveedor de un consumidor, es importante registrarlo con el sistema WMI y el subsistema COM de Windows.

Un archivo MOF puede contener varios tipos de proveedores para las mismas clases. El mismo nombre de proveedor se registra como, por ejemplo, una instancia o un proveedor de métodos. Para obtener más información, vea Registro de un proveedor.

Prueba de un proveedor

Cuando se registra el código del proveedor, es importante probar correctamente el proveedor mediante el proveedor de distintos consumidores (por ejemplo, scripts, código administrado de .NET y consumidores de C++).

Realice las siguientes tareas para probar el proveedor:

  • Asegúrese de que el proveedor se está cargando correctamente mediante el seguimiento de las notificaciones de eventos de MSFT_WmiProvider_OperationEvent. Estos eventos le informarán sobre los errores de carga del proveedor. Otras clases de solución de problemas que pueden resultar útiles son Win32_ProcessStartTrace y Win32_ProcessStopTrace. Para obtener más información sobre los proveedores de solución de problemas, vea Depuración de proveedores y Configuración de proveedores y clases de solución de problemas.
  • Si el proveedor es una instancia o proveedor de métodos, asegúrese de probar cada capacidad de proveedor uno a uno para evitar confusiones en el seguimiento de la lógica de código.
  • En el caso de un proveedor de instancias, cree una aplicación cliente o un script que invoque todas las interfaces del proveedor (enumeración, obtención, colocación y eliminación). Incluso si el proveedor no se supone que implemente nada, debe devolver un mensaje "no admitido". Puede encontrar los valores devueltos ya definidos en códigos de retorno de WMI.
  • Para asegurarse de que el contexto de seguridad deseado funciona según lo previsto, invoque las operaciones admitidas por el proveedor desde un contexto de seguridad no administrativo. El proveedor debe admitir la suplantación. Si un usuario que no tiene las credenciales de seguridad correctas intenta actualizar los datos o realizar una operación que ejecuta un método, el proveedor debe denegar el acceso con el mensaje de error adecuado.
  • Para obtener más información sobre la seguridad del proveedor, consulte Protección del proveedor.

Desarrollo de un proveedor WMI

Hospedaje y seguridad del proveedor

Suministro de datos a WMI mediante la escritura de un proveedor

Incorporación de un proveedor en una aplicación

Registro de un proveedor

Solución de problemas de aplicaciones cliente WMI

Protección del proveedor

Obtención y suministro de datos en una plataforma de 64 bits