본문 바로가기
운영체제 (LNX,WIN)

WMI - Windows Management Instrumentation

by 날으는물고기 2009. 11. 16.

WMI - Windows Management Instrumentation

WMI(Windows Management Instrumentation)

윈도우즈 2000 부터 WMI는 지원되어 왔다. 거의 모든 윈도우즈의 시스템은 표준에 따르는 단일 인터페이스를 사용해서 내부의 정보를 관리 하고 상호 작용하기 위한 방법으로 WMI를 사용한다. WMI를 사용하면 시스템 관리정보를 손쉽게 엑세스하고 조작할수 있다.
거의 모든 윈도우즈 시스템의 정보를 얻어오거나( OS정보, 하드웨어 정보, 네트워크 정보, 소프트웨어 정보, 서비스 정보 등등 ) 조작을 수행할수 있다.

WMI의 가장 큰 이점은 응용 프로그램 개발자가 다양한 정보를 공통의 아키텍처를 통해 엑세스 할수 있다는 것이다.
하드웨어 / OS / 소프트웨어에 대한 정보를 모두 엑세스 할수 있다.

WMI는 Windwos OS의 여러 컴포넌트의 핵심 아키텍쳐으로 특히 WBEM(Web-based Enterprise Management)과 DMTF(Desktop Management Task Force's)이 이 WMI로 구현되어 있다.


 - 공급자
   COM 인터페이스를 통해 WMI에 데이터를 제공한다.

 - 소비자
   응용 프로그램이나 스크립트이다. 정보를 수집하려는 클래스만 알면 정보를 얻어 올수 있다.
   ( C++이나 VB, C# 등을 사용해 쉽게 구현이 가능 하다 )

 - CIM 리포지토리 / CIMON (객체 관리자)
   객체들의 데이터베이스(클래스 정의 및 인스턴스)를 CIM 리포지토리라 하고 이는 CIMON으로 관리된다.
   이들은 WInMgmt라는 시스템 서비스로 나타나며 COM으로 접근이 가능하다.

 

WQL ( WMI Query Language )


WMI을 조작/엑세스 하는 ANSI-SQL 을 따르는 Query 언어

* WML에 공급자를 등록하거나 이벤트를 생성 처리하는 것들에 대한 정보는 MSDN 을 참고

 

* 할수 있는 작업들

1 . 메인보드 시리얼 구하기( VB )

Dim objs
Dim obj
Dim WMI

Set WMI = GetObject("WinMgmts:")
Set objs = WMI.InstancesOf("Win32_BaseBoard")
For Each obj In objs
 MsgBox (obj.SerialNumber)
Next

2 . WIndows계정 정보 변경

 

Win32_ComputerSystem.Rename

 

3 . 메소드를 이용한 프로세스 실행

 

4 . 메인보드 / CPU / VGA / RAM / HDD / CDROM 정보 구하기

 

5 . 서비스 상태/중지/시작 가능

 

6 . IIS 컨트롤 가능

 

7 . 설치된 소프트웨어 목록 보기

 

8 . 이 모든게 원격으로 컨트롤 가능

 

WMI를 c++에서 사용 코드... ( 코드는 첨부 )

 
         // 접속 처리
        Wmi wmi;
        if( wmi.connect() == false )
                return -1;
        Wmi::RowSet rs1;

        std::wcout << L"[CPU]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_Processor", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"Name"] << L" * " << rs1[0][L"NumberOfCores"] << L"\n" << rs1[0][L"Version"]  << std::endl;

        std::wcout << L"[Keyboard]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_Keyboard", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"Description"] << std::endl;

        std::wcout << L"[Mouse]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_PointingDevice", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"Caption"] << std::endl;

        std::wcout << L"[HDD]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_DiskDrive", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"Model"] << L"(" << rs1[0][L"Size"] << L")" << std::endl;

        std::wcout << L"[Sound]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_SoundDevice", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"Name"] << std::endl;

        std::wcout << L"[Video]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_VideoController", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"VideoProcessor"] << std::endl;

        std::wcout << L"[OS]" << std::endl;
        if( wmi.getClassProperties(  L"Win32_OperatingSystem", rs1 ) == false )
                return -1;
        std::wcout << L"" << rs1[0][L"Caption"] << L" " << rs1[0][L"CSDVersion"] << std::endl;
 
출력 결과 
[CPU]
Intel(R) Core(TM)2 CPU          6300  @ 1.86GHz * 2
Model 15, Stepping 6
[Keyboard]
PC/AT 101키 호환 키보드/USB 키보드(종류 1)
[Mouse]
Logitech USB Wheel Mouse
[HDD]
ST3320620AS(320070320640)
[Sound]
Realtek High Definition Audio
[Video]
GeForce 7600 GT
[OS]
Microsoft Windows XP Professional Service Pack 3
 


출처 : http://blog.naver.com/laster40
728x90

댓글