웹 서핑 하다가 정말 좋은 WMI 관련 내용을 찾아서 링크 합니다.

C#이 아닌 Visual C++ 6.0에서 구현한 점이 높이 평가할만 합니다.

관련된 MS 링크 예제 : http://msdn2.microsoft.com/en-us/library/aa390418(VS.85).aspx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#define _WIN32_DCOM
 
#include <iostream>
using namespace std;
#include <comdef.h>
#include <wbemidl.h>
 
#pragma comment(lib, "wbemuuid.lib")
 
int main(int argc, char **argv)
{
    HRESULT hres;
 
    // Initialize COM.
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres))
    {
        cout << "Failed to initialize COM library. "
        << "Error code = 0x"
        << hex << hres << endl;
        return 1;              // Program has failed.
    }
 
    // Initialize
    hres = CoInitializeSecurity(
                NULL,
                -1,        // COM negotiates service
                NULL,      // Authentication services
                NULL,      // Reserved
                RPC_C_AUTHN_LEVEL_DEFAULT,      // authentication
                RPC_C_IMP_LEVEL_IMPERSONATE,    // Impersonation
                NULL,               // Authentication info
                EOAC_NONE,          // Additional capabilities
                NULL              // Reserved
            );
 
 
    if (FAILED(hres))
    {
        cout << "Failed to initialize security. "
        << "Error code = 0x"
        << hex << hres << endl;
        CoUninitialize();
        return 1;          // Program has failed.
    }
 
    // Obtain the initial locator to Windows Management
    // on a particular host computer.
    IWbemLocator *pLoc = 0;
 
    hres = CoCreateInstance(
                CLSID_WbemLocator,
                0,
                CLSCTX_INPROC_SERVER,
                IID_IWbemLocator, (LPVOID *) & pLoc);
 
    if (FAILED(hres))
    {
        cout << "Failed to create IWbemLocator object. "
        << "Error code = 0x"
        << hex << hres << endl;
        CoUninitialize();
        return 1;       // Program has failed.
    }
 
    IWbemServices *pSvc = 0;
 
    // Connect to the root\cimv2 namespace with the
    // current user and obtain pointer pSvc
    // to make IWbemServices calls.
 
    hres = pLoc->ConnectServer(
 
                _bstr_t(L"ROOT\\CIMV2"),   // WMI namespace
                NULL,                      // User name
                NULL,                      // User password
                0,                         // Locale
                NULL,                      // Security flags
                0,                         // Authority
                0,                         // Context object
                &pSvc                    // IWbemServices proxy
            );
 
    if (FAILED(hres))
    {
        cout << "Could not connect. Error code = 0x"
        << hex << hres << endl;
        pLoc->Release();
        CoUninitialize();
        return 1;                // Program has failed.
    }
 
    cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
 
    // Set the IWbemServices proxy so that impersonation
    // of the user (client) occurs.
    hres = CoSetProxyBlanket(
 
                pSvc,                           // the proxy to set
                RPC_C_AUTHN_WINNT,              // authentication service
                RPC_C_AUTHZ_NONE,               // authorization service
                NULL,                           // Server principal name
                RPC_C_AUTHN_LEVEL_CALL,         // authentication level
                RPC_C_IMP_LEVEL_IMPERSONATE,    // impersonation level
                NULL,                           // client identity
                EOAC_NONE                     // proxy capabilities
            );
 
    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket. Error code = 0x"
        << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }
 
 
    // Use the IWbemServices pointer to make requests of WMI.
    // Make requests here:
 
    // For example, query for all the running processes
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
                bstr_t("WQL"),
                bstr_t("SELECT * FROM Win32_Process"),
                WBEM_FLAG_FORWARD_ONLY WBEM_FLAG_RETURN_IMMEDIATELY,
                NULL,
                &pEnumerator);
 
    if (FAILED(hres))
    {
        cout << "Query for processes failed. "
        << "Error code = 0x"
        << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }
    else
    {
        IWbemClassObject *pclsObj;
        ULONG uReturn = 0;
 
        while (pEnumerator)
        {
            hres = pEnumerator->Next(WBEM_INFINITE, 1,
                    &pclsObj, &uReturn);
 
            if (0 == uReturn)
            {
                break;
            }
 
            VARIANT vtProp;
 
            // Get the value of the Name property
            hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
            wcout << "Process Name : " << vtProp.bstrVal << endl;
            VariantClear(&vtProp);
        }
 
    }
 
    // Cleanup
    // ========
 
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
 
    return 0;   // Program successfully completed.
}
</wbemidl.h></comdef.h></iostream>
2008/02/11 01:06 2008/02/11 01:06

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요