Você está na página 1de 8

WBEM e WMI: Noes e Estrutura de uma aplicao

por Paulo Jorge Ferraz de Menezes Sacramento Departamento de Engenharia Informtica Universidade de Coimbra 3030 Coimbra, Portugal sacra@student.dei.uc.pt Resumo Explica-se o que a gesto empresarial com recurso a redes(WBEM), o Common Information Model(CIM), e a implementao Microsoft, Windows Management Instrumentation(WMI). So apresentadas algumas definies das noes essenciais para a compreenso do tema. Descrevem-se algumas formas de interagir com os esquemas CIM por forma a criar aplicaes WMI. Esta abordagem pretende ser um ponto de partida para aqueles que pretendam implementar tais aplicaes, com especial nfase nas classes WMI de monitorizao de carga, os Performance Counters. Palavras chave Gesto empresarial, Informtica, Programao, WMI, WBEM, CIM, Performance, Performance Counters, C++, COM, DCOM.

1. Introduo
Hoje em dia, quase todas as empresas tm includo no seu patrimnio uma rede interna de computadores, cujo nmero tem tendncia para ir aumentando medida que o tempo passa. Isto implica que os mecanismos de gesto associados a essa rede, quer em termos de pessoal, quer em termos de software e hardware informtico, sejam cada vez mais um factor importante do sucesso da infraestrutura informtica de uma empresa. Como consequncia directa disto, surgiu no seio das grandes empresas do sector a vontade de criar standards que tornassem mais uniforme o processo de gesto dessas infraestruturas por parte das empresas. Este texto pretende apresentar as noes resultantes desse esforo, descrever uma das implementaes realizadas na sua sequncia, mais propriamente, a implementao Microsoft, WMI, e referir a estrutura que uma aplicao, escrita em C++, que a pretenda usar, deve ter. Grande parte deste trabalho resulta da investigao realizada sobre o WMI Software Development Kit(SDK)[1], documento que se recomenda a quem pretenda obter mais informao sobre este assunto.

2. Web-Based Enterprise Management


O WBEM o resultado de uma iniciativa da indstria informtica para criar uma tecnologia standard para aceder a informao de gesto num ambiente empresarial. Esta

iniciativa foi patrocinada por algumas das maiores empresas do mundo na rea, como so os casos da IBM, Compaq/HP, Cisco Systems e Microsoft. Uma das partes mais importantes do WBEM o modelo orientado a objectos(OO) que est includo na sua definio. Esse modelo denominado Common Information Model(CIM) e, como o nome indica, pretende conseguir representar de forma normalizada os mais variados componentes de um sistema informtico atravs de um modelo OO.

3. Common Information Model


O CIM um modelo OO, que representa atravs de classes, associaes, agregaes e outra formas de notao UML, muitos dos componentes que constituem a rede informtica interna de uma empresa. Alguns desses componentes so os sistemas, as aplicaes, as subredes, os dispositivos, etc.. Uma das caractersticas que torna este modelo to importante, o facto de, como normal nos modelos OO, ser extensvel. A sua criao, no mbito do WBEM, prev que cada fabricante crie a sua implementao sobre o CIM, o que significa pegar nas classes j existentes, necessariamente genricas, e criar classes que descendam dessas, e que definam comportamento inerente ao sistema a que se destinam. Estas implementaes devem permitir criar classes que representem discos rgidos, routers de rede ou mesmo tecnologias definidas pelo utilizador como seja um ar-condicionado em rede. Ao ver e alterar classes do CIM, o gestor pode controlar os diferentes aspectos da empresa. Veja- -se o exemplo em que o gestor executa uma query a uma classe CIM que representa uma workstation. Ele pode correr um script que altere uma instncia dessa classe. misso da implementao propagar essa alterao desde a instncia da classe at ao dispositivo fsico que ela representa. Como bvio, o CIM totalmente independente da linguagem de programao. Existem trs tipos de classes no CIM, com nveis crescentes de especificidade. Isto , os dois primeiros nveis fazem parte do standard e definem aspectos genricos da empresa, enquanto que o terceiro nvel dependente da implementao de cada fabricante e, como tal, constitudo por classes que descendem do nvel anterior e que incluem comportamento especfico do sistema operativo. Esses trs tipos de classe so as classes de ncleo(core), as classes comuns(common) e as classes descendentes(extended). Classes de ncleo: As classes de ncleo representam objectos que se aplicam a todas as reas da gesto. Fornecem um vocabulrio bsico para analizar e descrever sistemas. Como exemplos, as classes _Parameters e _SystemSecurity. Classes comuns As classes comuns representam objectos que se aplicam a reas mais especficas da gesto. Mas continuam a ser independentes de uma implementao particular. Descendem das classes de ncleo. Um exemplo a classe CIM_UnitaryComputerSystem.

Classes descendentes As classes descendentes representam objectos que so especficos de cada tecnologia. Descendem das classes comuns e tipicamente aplicam-se a plataformas como o UNIX ou o Microsoft Windows. exemplo deste tipo de classes a classe Win32_ComputerSystem.

Para tornar mais explcita a relao entre as classes comuns e as classes descendentes, notese o facto de a classe Win32_ComputerSystem ser descendente da classe CIM_UnitaryComputerSystem, sendo que a primeira absolutamente especfica de ambientes Windows e a segunda standard e pode ser encontrada em todas as plataformas aderentes. Um exemplo de uma associao a classe Win32_ComputerSystemProcessor, que associa os objectos da classe Win32_ComputerSystem classe Win32_Processor e que representa nem mais nem menos a noo que todos temos de que, em geral, um computador funcional tem um processador. Outra noo que importante a noo de esquema(schema). Um esquema um conjunto de classes coerente e completo que representa um sistema. CIM e Win32 so dois exemplos de esquemas. As respectivas classes comeam com o prefixo CIM_ e Win32_. Uma implementao em UNIX poderia ter classes do gnero UNX_Processor, sendo o esquema denominado de UNX. De seguida vamos descrever o WMI, que usa estes dois esquemas.

4. Windows Management Instrumentation


O WMI a implementao Microsoft do WBEM. Usa o modelo CIM e contm o esquema Win32, j referido na seco anterior. o sucessor, em termos de tecnologia Microsoft, do Performance Data Helper(PDH)[2], que era algo que permitia aceder a informao de medio de performance em ambientes Windows antes de existir o standard WBEM. Atravs do WMI, e como ideia do WBEM em geral, possvel gerir computadores localmente ou remotamente. Este ltimo ponto representa uma grande vantagem. Basicamente, significa que o gestor, desde que tenha as permisses necessrias, pode gerir todo o sistema a partir de um ponto central, recolhendo dados e alterando o estado dos objectos e, consequentemente, das entidades fsicas correspondentes, sejam elas partes de hardware ou de software(servios, contas de utilizadores...). A gesto de um disco rgido, por exemplo, pode consistir na monitorizao do seu espao livre, passando pela deleco remota de ficheiros, se tal for necessrio, ou pela alterao de parmetros de segurana, parties, etc.. Algumas das facetas do WMI incluem a monitorizao de performance, tarefas bsicas de house-keeping, a manipulao de ficheiros de log e a recepo e tratamento de eventos. de referir que muitas pessoas j estiveram em contacto com o WMI sem o saberem. A aplicao do Windows NT/2000/XP, Performance Monitor, faz uso desta tecnologia para implementar a sua funcionalidade.

5. Formas de interaco com o WMI/CIM


Existem basicamente duas formas de interagir com o WMI e obter dele a informao necessria. A primeira so os scripts, que, como habitualmente, proporcionam funcionalidade limitada mas de fcil e rpida utilizao. Linguagens de script habitualmente usadas so o Perl e o VBscript. A segunda so as aplicaes construdas em C/C++ ou mesmo C#, a nova linguagem Microsoft orientada a objectos, includa na plataforma .Net. Estas aplicaes fazem uso das tecnologias COM/DCOM para aceder informao de que necessitam. importante notar que muito simples escrever uma aplicao em C# que aceda ao WMI e obtenha informao, enquanto que o mesmo no se pode dizer, de forma alguma, do C/C++, como reconhecido, alis, pela Microsoft ao longo da documentao. No entanto, existem sempre vantagens na utilizao de lignuagens mais complexas. Neste caso, a flexibilidade uma dessas vantagens. Existem muitas coisas que no possvel fazer sem ser atravs de C++. Como nota final desta seco, refira-se que existe outra linguagem, que no de programao nem de scripting, e que se chama WQL(WMI Query Language). Ela tambm muito til e pode ser usada tanto em aplicaes como em scripts. O seu funcionamento e sintaxe muito parecido com a linguagem SQL to utilizada nas bases de dados. Com ela podemos fazer coisas to interessantes como, por exemplo: Select * from Win32_PhysicalDisk where freeSpace<50000 (nota: Esta query no totalmente vlida. Serve para fins ilustrativos) Para quem j tenha tido contacto com SQL, o significado desta query bvio. Ela permite seleccionar todos os campos das instncias da classe disco rgido que tenham espao livre inferior a 50 Mb.

6. Estrutura de uma aplicao WMI em C++


Uma aplicao WMI pode ser dividida em cinco partes bsicas. 6.1 Initializao do Component Object Model(COM) Uma vez que o WMI baseado em tecnologia COM, necessrio inicializ-la e definir alguns parmetros de segurana. A incializao feita atravs da funo CoInitializeEx(). Atravs dela podem definir-se opes como a necessidade da aplicao ser multithreaded (ex: CoInitializeEx(0, COINIT_MULTITHREADED)). A definio dos parmetros de segurana feita atravs da funo CoInitializeSecurity(). necessrio cham-la pois existem muitos problemas de segurana que devem ser tidos em conta na programao de aplicaes WMI. Esta funo permite definir opes ao nvel da autenticao e impersonation, por exemplo.

6.2 Criao de uma ligao a um namespace WMI Por definio, o WMI corre como um programa independente, distinto do nosso. Isto torna necessria a existncia de uma ligao entre a nossa aplicao e o WMI. O primeiro passo que deve ser dado para isso criar uma instncia de um objecto do tipo IWbemLocator. Isto feito atravs da funo CoCreateInstance(), com um conjunto apropriado de parmetros, inclundo um ponteiro para um objecto do tipo pretendido(passagem por referncia). De seguida, pode usar-se o objecto para chamar o mtodo ConnectServer() da classe IWbemLocator. este mtodo que estabelece de facto a ligao a um namespace WMI e aqui que se deve especificar se se quer controlar o WMI numa mquina local ou remota. Para alm da definio da localizao a que se pretende ligar, necessrio passar novamente, por referncia, um ponteiro para um objecto da classe IWbemServices. Como habitual no contexto das Remote Procedure Calls(RPCs), mesmo podendo a chamada no ser remota, existe a noo de proxy. O que o mtodo ConnectServer() devolve de facto um proxy para uma interface do tipo IWbemServices. esta interface que nos permite mais frente obter todas as informaes e realizar todas as operaes sobre o WMI. 6.3 Definio de parmetros de segurana na ligao WMI Como seria de esperar, existem cuidados de segurana que tm de ser tidos ao lidar com este proxy. Basta notar que ele nos d acesso a objectos forado-processo. O COM no deixa sequer que um processo aceda a recursos de outro processo se no forem assegurados todos os mecanismos de segurana. Isto pode ser feito atravs da funo CoSetProxyBlanket(), que recebe uma grande quantidade de parmetros, novamente relacionados com autenticao e impersonation. 6.4 Implementao do propsito da nossa aplicao neste ponto que tudo aquilo que se pretende obter e manipular atravs do WMI pode ser feito. Existe uma variedade infindvel de coisas com que podemos interagir no WMI. Seria obviamente impossvel explic-las todas. Para ilustrar uma das funcionalidades existentes, vai ser apresentado um pequeno exemplo, baseado num sub-conjunto de classes denominadas de Performance Counters, que, como o nome diz, servem para obter informao relacionada com a performance das vrias partes de um sistema informtico. Ao longo do exemplo, pSvc representa o ponteiro para IWbemServices. Criao de um ponteiro para um objecto IWbemClassObject(unidade bsica que contm informao sobre uma classe):

IWbemClassObject *pClass = NULL; Definio da classe sobre a qual se vai obter informao. Neste caso foi utilizada a classe que contm Performance Counters relativos memria central: wchar_t *aux = L"Win32_PerfFormattedData_PerfOS_Memory"; BSTR classPath = SysAllocString(aux); Obteno da definio da classe, com vista a perceber que atributos e mtodos a compem: hres = pSvc->GetObject(classPath, 0, NULL, &pClass, NULL); Obteno da lista de atributos(counters) propriamente dita: SAFEARRAY* pProperties = NULL; hres = pClass->GetNames(NULL, WBEM_FLAG_ALWAYS WBEM_FLAG_NONSYSTEM_ONLY, NULL, &pProperties); |

Criao de uma enumeration com todas as instncias da classe que estamos a utilizar(no caso da memria ser s uma): IEnumWbemClassObject* enumPointer; hres = pSvc->CreateInstanceEnum(aux, WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY , NULL, &enumPointer); Obteno do valor de um dos counters de que tivmos conhecimento anteriormente(por exemplo, PageFaultsPersec): IWbemClassObject *pClassAux; ULONG ret; VARIANT v; BSTR strClassProp = SysAllocString(L"PageFaultsPersec"); do { VariantInit(&v); enumPointer->Next(WBEM_INFINITE, 1, &pClassAux, &ret); if(ret!=0)

hres = pClassAux->Get(strClassProp, 0, &v, 0, 0); O valor do contador est na varivel v, do tipo VARIANT, que representa uma union, para que possa suportar diferentes tipos de dados(Strings, inteiros, floats,...) VariantClear( &v ); } while(ret!=0); 6.5 Cleanup manual e finalizao Finalmente, existe outro aspecto que muito importante ter em conta, relacionado com o impacto que uma aplicao de monitorizao deve ter no uso de recursos do sistema. O leitor concordar que ele deve ser mnimo. Para que isso seja possvel, necessrio que quando a aplicao estiver pronta a terminar, sejam libertados todos os recursos por ela utilizados. A negligncia deste aspecto causar aquilo que se chamam de Resource Leaks, que representam recursos que apesar de no estarem a ser utilizados para nada, nem por ningum, continuam a ocupar espao que poderia servir para outros que dele necessitassem. Felizmente que este processo no to complicado como importante. H basicamente trs tarefas que devem ser realizadas. Primeiro, libertar todos os ponteiros COM utilizados(chamados de COM Smart Pointers), o que pode ser feito atravs do mtodo Release(). Segundo, libertar o espao alocado para Strings, atravs do mtodo SysFreeString(). Terceiro, finalizar o COM, atravs da chamada ao mtodo CoUninitialize().

7. Concluses
Ao longo deste artigo foram descritos alguns conceitos considerados essenciais como background a quem pretenda iniciar-se na construo de aplicaes WMI. Espera-se que o objectivo tenha sido atinjido. necessrio que fique bem claro que quem pretenda ir mais alm na explorao do mundo do WMI, deve consultar as referncias que se juntam, bem como outras que possam existir.

Agradecimentos
O autor agradece ao Eng. Paulo Pimenta Marques pela motivao que deu realizao de investigao nesta rea. Este trabalho foi realizado, em grande parte, num dos laboratrios do CISUC, no mbito do grupo de sistemas confiveis.

Referncias

1. 2. 3.

Microsoft Platform Software Development Kit, Windows Management Instrumentation, http://msdn.microsoft.com/library/default.asp?url=/library/enus/wmisdk/wmistart_5kth.asp?frame=true , Novembro, 2001 Domingues, P. Tese de Mestrado: Balanceamento de Carga para Aplicaes Paralelas com Distribuio Regular de Dados Executadas em Sistemas Distribudos, Coimbra, Maro 1999, pg. 54-56 Robinson S., et al. Professional C# , Programmer To Programmer, Wrox Press, Ltd., 2001