Últimamente en nuestro equipo de soporte hemos estado recibiendo muchas consultas y problemas relacionados con WMI. Dado que este componente está siendo utilizado últimamente por varias aplicaciones y cada vez lo será más, creo que va a ser de mucha utilidad para todos la siguiente serie de posts que les presento.

Estarán divididos dado que es mucho material para un solo post.

Cubriremos:

Arquitectura Básica de WMI

Accediendo al repositorio WMI

Pasos Básicos de Troubleshoot de WMI

Troubleshoot de Problemas de Performance de WMI

Hoy comenzaremos con los aspectos básicos de la arquitectura de WMI

Que es el WMI? WMI es un sistema basado en el standard Web-based Enterprise Management (WBEM). Con el podemos acceder a gran cantidad de información almacenada en nuestro sistema operativo Windows. Este acceso a esta información puede ser realizado mediante scripts, .Net (clase system.management) o por líneas de comando.

Podemos dividir la arquitectura de WMI de la siguiente forma:

Como vemos en el punto 2, la estructura de WMI está dividida en 2, el servicio de WMI (winmgmt) y el Repositorio.

El repositorio usa namespace que contienen a su vez sub-namespaces y estos están ordenados en una jerarquía de objetos. Las aplicaciones se conectan primero a un namespace y luego a través de ese namespace puede acceder a los objetos.

El comienzo de estos namespace esta dado desde ROOT/ Luego al iniciar el servicio de WMI se crean namespaces como ROOT/DEFAULT ROOT/CIMV2 . Como vemos en el grafico, el servicio de WMI es el intermediario entre los Providers, las aplicaciones y el repositorio.

Este repositorio aloja información estática de objetos como las clases definidas por los objetos y toda esta información obtenida de los providers cuando el cliente lo requiere.

Un Provider es un objeto COM que controla los objetos de WMI. Este objeto es un componente que puede ser un disco rigido, una tarjeta de red o un servicio. El Provider entrega al WMI la información sobre el objeto y controla los mensajes de los mismos.

Los Providers son una DLL y un fichero Managed Object Format (MOF) que define las clases para el Provider. Los Providers son clasificados por el WMI de acuerdo a lo que realiza el provider.

Clasificaciones

Descripción

Clase

Puede entregar, modificar, eliminar y listar una clase especifica. También soporta las queries realizadas. Por ejemplo el Directorio Activo es un ejemplo de un servicio que también entrega clases.

Instancia

Puede entregar, modificar, eliminar y listar una instancia especifica. Una instancia representa a un objeto. También soporta que se le realicen queries.

Propiedad

Puede entregar y modificar los valores de las propiedades de los objetos.

Metodo

Métodos específicos para clases de un provider.

Evento

Genera eventos de notificaciones.

“Event Consumer”

Crea una relación entre el objeto físico y el objeto lógico para poder crear la notificaciones de eventos.

Por último, debemos hablar de Common Information Model (CIM) y de los ficheros Managed Object Format (MOF).

CIM es un modelo para lenguajes orientados a objetos como C++ y Java. Los desarrolladores de WMI escriben sus clases en lenguaje MOF, una vez que estas clases están estructuradas en MOF, los desarrolladores pueden dar definiciones a las clases.

Esto se hace compilando un fichero MOF en un binario (BMF) e introduciéndola dentro del Windows Driver Model (WDM).

Los Providers se pueden compilar también en MOF y utilizar las APIs de WMI COM para crear la estructura de WMI con sus definiciones.

Finalmente, los Providers pueden usar un compilador MOF (mofcomp.exe) para agregar las clases al repositorio WMI.

Nos vemos en el próximo post

Saludos

Gastón Gardonio

TAGs: WMI arquitectura, basico, providers