티스토리 뷰
728x90
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
링크
TAG
- 블루버블다이빙팀
- script
- 암호화
- 스쿠버다이빙
- 스쿠버 다이빙
- C++
- Linux
- ip
- 제주도
- PowerShell
- 블루버블다이브팀
- 서귀포블루버블
- 윈도우
- DLL
- 패턴
- 티스토리챌린지
- C# 고급 기술
- 블루버블
- C
- 서귀포
- C#
- C#.NET
- CMake
- 성산블루버블
- 울릉도
- 현포다이브
- Build
- OpenSource
- Windows
- 외돌개
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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