티스토리 뷰

개발/윈도우

WMI 윈도우 이름 얻기

-=HaeJuK=- 2024. 12. 3. 17:52
728x90
WMI로 Windows 정보 가져오기

WMI로 Windows 운영 체제 정보 가져오기

WMI는 Windows 시스템 정보를 쿼리할 수 있는 강력한 도구입니다. 이를 통해 운영 체제 이름, 버전, 아키텍처 등 다양한 정보를 가져올 수 있습니다.

1. 코드 설명

아래 코드는 WMI를 사용하여 Windows 운영 체제 정보를 가져오는 C++ 코드입니다:

2. 코드


#include 
#include 
#include 
#pragma comment(lib, "wbemuuid.lib")

void GetWindowsNameWithWMI() {
    HRESULT hres;

    // COM 라이브러리 초기화
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres)) {
        std::cerr << "COM 초기화 실패" << std::endl;
        return;
    }

    // 보안 초기화
    hres = CoInitializeSecurity(
        NULL, -1, NULL, NULL,
        RPC_C_AUTHN_LEVEL_DEFAULT,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL, EOAC_NONE, NULL);

    if (FAILED(hres)) {
        std::cerr << "보안 초기화 실패" << std::endl;
        CoUninitialize();
        return;
    }

    IWbemLocator* pLoc = nullptr;
    IWbemServices* pSvc = nullptr;

    // WMI Locator 객체 생성
    hres = CoCreateInstance(
        CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
        IID_IWbemLocator, (LPVOID*)&pLoc);

    if (FAILED(hres)) {
        std::cerr << "IWbemLocator 객체 생성 실패" << std::endl;
        CoUninitialize();
        return;
    }

    // 네임스페이스 연결
    hres = pLoc->ConnectServer(
        BSTR(L"ROOT\\CIMV2"), NULL, NULL, 0,
        NULL, 0, 0, &pSvc);

    if (FAILED(hres)) {
        std::cerr << "WMI 네임스페이스 연결 실패" << std::endl;
        pLoc->Release();
        CoUninitialize();
        return;
    }

    // WMI 쿼리 실행
    IEnumWbemClassObject* pEnumerator = nullptr;
    hres = pSvc->ExecQuery(
        BSTR(L"WQL"),
        BSTR(L"SELECT Caption, Version, OSArchitecture FROM Win32_OperatingSystem"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
        NULL, &pEnumerator);

    if (FAILED(hres)) {
        std::cerr << "쿼리 실행 실패" << std::endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return;
    }

    // 결과 처리
    IWbemClassObject* pclsObj = nullptr;
    ULONG uReturn = 0;

    while (pEnumerator) {
        hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
        if (uReturn == 0) break;

        VARIANT vtCaption, vtVersion, vtArchitecture;

        pclsObj->Get(L"Caption", 0, &vtCaption, 0, 0);
        pclsObj->Get(L"Version", 0, &vtVersion, 0, 0);
        pclsObj->Get(L"OSArchitecture", 0, &vtArchitecture, 0, 0);

        std::wcout << L"OS 이름: " << vtCaption.bstrVal << std::endl;
        std::wcout << L"버전: " << vtVersion.bstrVal << std::endl;
        std::wcout << L"아키텍처: " << vtArchitecture.bstrVal << std::endl;

        VariantClear(&vtCaption);
        VariantClear(&vtVersion);
        VariantClear(&vtArchitecture);

        pclsObj->Release();
    }

    // 자원 해제
    pEnumerator->Release();
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
}
        

3. 실행 결과

위 코드를 실행하면 Windows 운영 체제 정보를 출력합니다.

  • OS 이름: Windows 10 Pro
  • 버전: 10.0.19045
  • 아키텍처: 64비트
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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
글 보관함
250x250