通过WMI技术获取操作系统的信息类Win32_OperatingSystem

2024-03-27 12:58

本文主要是介绍通过WMI技术获取操作系统的信息类Win32_OperatingSystem,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目比较时间比较紧张,WMI匆忙找了一下,不理解其中的大部分内容

从msdn上找了个例子一旦运行起来,心里也就有了着落了。

于是有了一些测试,也有了一些加深的理解

#include <stdio.h>
#define _WIN32_DCOM
#include <wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
#include <iostream>
using namespace std;
#include <comdef.h>void main(void)
{HRESULT hr;_bstr_t bstrNamespace;IWbemLocator *pWbemLocator = NULL;IWbemServices *pServices = NULL;IWbemClassObject *pDrive = NULL;hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);hr = CoInitializeSecurity(NULL, -1, NULL, NULL,RPC_C_AUTHN_LEVEL_CONNECT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL, EOAC_NONE, 0);if (FAILED(hr)){CoUninitialize();cout << "Failed to initialize security. Error code = 0x" << hex << hr << endl;return;}hr = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**) &pWbemLocator);if( FAILED(hr) ) {CoUninitialize();printf("failed CoCreateInstance\n");return;}bstrNamespace = L"root\\cimv2";hr = pWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, NULL, 0, NULL, NULL, &pServices);if( FAILED(hr) ) {pWbemLocator->Release();CoUninitialize();printf("failed ConnectServer\n");return;}pWbemLocator->Release();printf("Successfully connected to namespace.\n");BSTR bstrPath = SysAllocString(L"Win32_LogicalDisk.DeviceID=\"C:\"");// *******************************************************//// Perform a full-instance retrieval. // *******************************************************//hr = pServices->GetObject(bstrPath,0,0, &pDrive, 0);if( FAILED(hr) ){ pServices->Release();CoUninitialize();printf("failed GetObject\n");return;}    // Display the objectBSTR  bstrDriveObj;hr = pDrive->GetObjectText(0, &bstrDriveObj);printf("%S\n\n", bstrDriveObj);pDrive->Release();pDrive = NULL;// *****************************************************//// Perform a partial-instance retrieval. // *****************************************************//IWbemContext  *pctxDrive; // Create context objecthr = CoCreateInstance(CLSID_WbemContext, NULL, CLSCTX_INPROC_SERVER, IID_IWbemContext, (void**) &pctxDrive);if (FAILED(hr)){pServices->Release();pDrive->Release();    CoUninitialize();printf("create instance failed for context object.\n");return;}VARIANT  vExtensions;VARIANT  vClient;VARIANT  vPropertyList;VARIANT  vProperty;SAFEARRAY  *psaProperties;SAFEARRAYBOUND saBounds;LONG  lArrayIndex = 0;// Add named values to the context object. VariantInit(&vExtensions);V_VT(&vExtensions) = VT_BOOL;V_BOOL(&vExtensions) = VARIANT_TRUE;hr = pctxDrive->SetValue(_bstr_t(L"__GET_EXTENSIONS"), 0, &vExtensions);VariantClear(&vExtensions);VariantInit(&vClient);V_VT(&vClient) = VT_BOOL;V_BOOL(&vClient) = VARIANT_TRUE;hr = pctxDrive->SetValue(_bstr_t(L"__GET_EXT_CLIENT_REQUEST"), 0, &vClient);VariantClear(&vClient);// Create an array of properties to return.saBounds.cElements = 1;saBounds.lLbound = 0;psaProperties = SafeArrayCreate(VT_BSTR, 1, &saBounds);// Add the Caption property to the array.VariantInit(&vProperty);V_VT(&vProperty) = VT_BSTR;V_BSTR(&vProperty) = _bstr_t(L"Caption");SafeArrayPutElement(psaProperties, &lArrayIndex, V_BSTR(&vProperty));VariantClear(&vProperty);VariantInit(&vPropertyList);V_VT(&vPropertyList) = VT_ARRAY | VT_BSTR;V_ARRAY(&vPropertyList) = psaProperties;// Put the array in the named value __GET_EXT_PROPERTIES.hr = pctxDrive->SetValue(_bstr_t(L"__GET_EXT_PROPERTIES"), 0, &vPropertyList);VariantClear(&vPropertyList);SafeArrayDestroy(psaProperties);// Pass the context object as the pCtx parameter of GetObject.hr = pServices->GetObject(bstrPath, 0, pctxDrive, &pDrive, 0);if( FAILED(hr) ){ pServices->Release();CoUninitialize();printf("failed property GetObject\n");return;}    // Display the objecthr = pDrive->GetObjectText(0, &bstrDriveObj);printf("%S\n\n", bstrDriveObj);SysFreeString(bstrPath);VARIANT vFileSystem;// Attempt to get a property that was not requested.// The following should return a NULL property if// the partial-instance retrieval succeeded.hr = pDrive->Get(_bstr_t(L"FileSystem"), 0,&vFileSystem, NULL, NULL);if( FAILED(hr) ){ pServices->Release();pDrive->Release();    CoUninitialize();printf("failed get for file system\n");return;}    if (V_VT(&vFileSystem) == VT_NULL)printf("file system variable is null - expected\n");elseprintf("FileSystem = %S\n", V_BSTR(&vFileSystem));VariantClear(&vFileSystem);pDrive->Release();    pctxDrive->Release();pServices->Release();pServices = NULL;    // MUST be set to NULLCoUninitialize();return;  // -- program successfully completed
};


原来这里的sql语句的参数皆可以从下面的这些类里面出来


https://msdn.microsoft.com/en-us/library/windows/desktop/aa394239(v=vs.85).aspx


Win32_OperatingSystem例如现在要获取系统的信息,从类的属性
BootDevice就可以知道启动硬盘的信息


这篇关于通过WMI技术获取操作系统的信息类Win32_OperatingSystem的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/852168

相关文章

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

springboot实现配置文件关键信息加解密

《springboot实现配置文件关键信息加解密》在项目配置文件中常常会配置如数据库连接信息,redis连接信息等,连接密码明文配置在配置文件中会很不安全,所以本文就来聊聊如何使用springboot... 目录前言方案实践1、第一种方案2、第二种方案前言在项目配置文件中常常会配置如数据库连接信息、Red

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代