首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C++中使用WMI类Msvm_SummaryInformation或Msvm_VirtualSystemManagementService查询虚拟机功能

在C++中使用WMI类Msvm_SummaryInformation或Msvm_VirtualSystemManagementService查询虚拟机功能,可以通过以下步骤实现:

  1. 引入必要的头文件和命名空间:
代码语言:txt
复制
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")

using namespace std;
using namespace _com_util;
using namespace WbemServices;
  1. 初始化COM库并连接WMI服务:
代码语言:txt
复制
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
    cout << "Failed to initialize COM library. Error code: " << hex << hres << endl;
    return 1;
}

hres = CoInitializeSecurity(
    NULL,
    -1,
    NULL,
    NULL,
    RPC_C_AUTHN_LEVEL_DEFAULT,
    RPC_C_IMP_LEVEL_IMPERSONATE,
    NULL,
    EOAC_NONE,
    NULL
);
if (FAILED(hres))
{
    cout << "Failed to initialize security. Error code: " << hex << hres << endl;
    CoUninitialize();
    return 1;
}

IWbemLocator* pLoc = NULL;
hres = CoCreateInstance(
    CLSID_WbemLocator,
    0,
    CLSCTX_INPROC_SERVER,
    IID_IWbemLocator,
    (LPVOID*)&pLoc
);
if (FAILED(hres))
{
    cout << "Failed to create IWbemLocator object. Error code: " << hex << hres << endl;
    CoUninitialize();
    return 1;
}

IWbemServices* pSvc = NULL;
hres = pLoc->ConnectServer(
    _bstr_t(L"ROOT\\Virtualization\\V2"),
    NULL,
    NULL,
    0,
    NULL,
    0,
    0,
    &pSvc
);
if (FAILED(hres))
{
    cout << "Could not connect to WMI namespace. Error code: " << hex << hres << endl;
    pLoc->Release();
    CoUninitialize();
    return 1;
}

hres = CoSetProxyBlanket(
    pSvc,
    RPC_C_AUTHN_WINNT,
    RPC_C_AUTHZ_NONE,
    NULL,
    RPC_C_AUTHN_LEVEL_CALL,
    RPC_C_IMP_LEVEL_IMPERSONATE,
    NULL,
    EOAC_NONE
);
if (FAILED(hres))
{
    cout << "Failed to set proxy blanket. Error code: " << hex << hres << endl;
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
    return 1;
}
  1. 构造查询语句并执行查询:
代码语言:txt
复制
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
    bstr_t("WQL"),
    bstr_t("SELECT * FROM Msvm_SummaryInformation"),
    WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
    NULL,
    &pEnumerator
);
if (FAILED(hres))
{
    cout << "Failed to execute query. Error code: " << hex << hres << endl;
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
    return 1;
}

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

    VARIANT vtProp;
    hres = pclsObj->Get(L"ElementName", 0, &vtProp, 0, 0);
    if (SUCCEEDED(hres))
    {
        wcout << "ElementName: " << vtProp.bstrVal << endl;
        VariantClear(&vtProp);
    }

    pclsObj->Release();
}
  1. 释放资源并关闭COM库:
代码语言:txt
复制
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
CoUninitialize();

这样就可以在C++中使用WMI类Msvm_SummaryInformation或Msvm_VirtualSystemManagementService查询虚拟机功能了。请注意,以上代码仅为示例,实际应用中可能需要根据具体情况进行适当修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java 调用win32 api 学习总结

要使用 J/Direct, 您需要安装 1.02.4337 版本或更高的 Microsoft 编译器 for Java (Jvc.exe) 和 Microsoft 虚拟机 for Java 2252 或更高版本...6 生成win32 dll ,就可以被java调用 了 ======== 使用 J-Interop 在 Java 中调用WMI 有关WMI的小知识 Windows管理规范(WMI)是微软对来自分布式管理任务组...这个例子利用J-Interop的API使用Win32_Service类解释WMI操作,将启动和停止在这个例子中的窗口服务。...它使用SWbemLocator对象连接到SWbemServices,SWbemServices对象提供对本地或远程计算机WMI的访问,它调用“ConnectServer”方法连接到SWbemServices...也可以使用WMI查询语言(WQL)达到同样的目的,如下所示: finalintRETURN_IMMEDIATE=0x10; finalintFORWARD_ONLY=0x20; Object

2.2K30
  • WMI讲解(是什么,做什么,为什么)

    端口135)或 WinRM 协议(SOAP–端口 5985),如下图 此图清晰明了的显示了WMI基础结构与 WMI 提供者和托管对象之间的关系,它还显示了 WMI 基础结构和 WMI 使用者之间的关系...WMI Consumers(WMI使用者) 它位于WMI构架的最顶层,是WMI技术使用的载体。 如果我们是C++程序员,我们可以通过COM技术直接与下层通信。...而脚本语言则要支持WMI Scripting API,间接与下层通信。 对于.net平台语言,则要使用System.Management域相关功能与下层通信。...命名空间为SecurityCenter 注意:这里Powershell操作WMI的对象使用的是内置模块Get-WmiObject,以及查询的类为Win32_Service类,Win32_Service...的其他类在官方文档中已经罗列详细:Win32类计算机硬件类、操作系统类等,但是要注意Win32_Service不是唯一可以操作WMI的类,以下类可以交替使用。

    1.3K10

    规避检测(共五章):第五章

    高级 API 函数(如 WaitForSingleObject()或 Sleep())以相对间隔运行。因此,沙盒开发人员可能不关心绝对超时并错误地处理它们。...从服务中检索信息,并使用以下功能执行服务的方法。...使用以下函数检查查询结果: [enumerator]->Next [object]->Get 1.通用 WMI 查询 由于 WMI 提供了另一种收集系统信息的方法,因此它可用于执行其他文章中描述的规避技术...2.1 使用 WMI 启动进程 可以使用带“Create” 方法的“Win32_Process” 类使用 WMI 创建新进程: CoInitializeEx(NULL, COINIT_MULTITHREADED...WMI 只是提供了另一种计划任务的方法。 可以使用带有“Create”方法的“Win32_ScheduledJob”类使用 WMI 创建新任务。

    34420

    你知道,我是怎样监控你所有打开EXE的吗

    它是Windows操作系统中管理数据和操作的基础模块,它提供了一个通过操作系统、网络和企业环境去管理本地或远程计算机的统一接口集。 ?...通过WMI,我们可以获取关于硬件和软件的相关数据,也可以提供关于硬件或软件服务的数据给WMI。...WMI提供者是由实现逻辑的DLL和承载着描述数据和操作的类的托管对象格式MOF(Managed Object Format)文件组成。...对于使用C++代码实现我们就可以直接通过COM技术直接与下层进行通信。对于.net平台语言,则要使用System.Management域相关功能与下层进行通信。...WMI的使用者,可以进行查询、枚举数据,也可以运行Provider的方法,还可以向WMI订阅消息。其中这些数据操作都是要有相应的Provider来提供。 ? END

    1.6K21

    WMI技术介绍和应用——VC开发WMI应用的基本步骤

    在《WMI技术介绍和应用——WMI概述》中介绍了我们可以使用C++、.net或者支持ActiveX技术的脚本语言来使用WMI。...和脚本语言相比,C++对WMI有强大的控制和定制性,当然也具有更大的复杂性。本文将主要讲述使用VC如何搭建一个使用WMI的框架。...因为我们要使用的WMI功能和命名空间有很大的关联,所以该类将提供这个设置命令空间的函数。...WMI完成相关功能,比如查询硬盘ID,实际执行查询的操作是在WMI服务中执行的,而不是我们的应用。...在我定义的类中,我将该步骤封装成一个纯虚函数Excute,继承CWMI的类将实现具体的工作。 清理          我们在使用完以上的代理和实例后,我们要释放它们,并且最后要释放COM库。

    1.3K40

    网站管理软件 – AspxSpy2014 Final

    注意:如果管理员修改了web.config或其他配置文件中的权限设置(例如将High-Trust的配置文件中删除了SocketPermission等),则不保证信任等级代表的权限正确。...查询功能 ?...用于查询本机或远程主机WMI信息,利用得当可以获取不少信息。 Computer留空则为本机,Username与Password两项均不使用。...如果需要使用远程域成员主机的本地账户认证,则可将域名指定为IP或计算机名。 Namespace为WMI命名空间,默认为root\CIMV2,QueryString为需要使用的WQL查询语句。...更多关于WMI的知识,参考: WMICodeCreater,查询命名空间、类、属性与方法,以及生成代码: http://www.microsoft.com/en-us/download/confirmation.aspx

    2.1K90

    WMI技术介绍和应用——事件通知

    我们之前介绍的使用WMI查询系统、硬件等信息的功能,是通过查询WMI静态数据的空间实现的。这个功能的核心是在上图中2,即WMI Infrastructure层实现的。...本文将让我们对WMI的认识深入到1,即WMI Providers and Managed Objects层。具体的功能是使用WMI检测到WMI数据和服务的变化。...介绍了这么多基础知识了,那如何查询事件通知呢?在《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中,我们讲解WMI查询静态数据时,我们可以使用同步查询和半同步查询两种查询方式。...永久事件使用者是保存在WMI仓库中(上图2层中WMI repository),并且是一个在WMI中注册的可执行文件,这样WMI便可以方便的寻找和加载它了。        ...这些事件都是由事件提供者(An event provider)发送给WMI的。它也是个COM组件。我们可以使用C++或者C#编写事件提供者程序。大部分事件提供者管理着一个WMI对象。

    1.3K20

    Z大牛|ZABBIX全栈级监控实践(二)Windows监控

    简单的说,WMI中包含了当前Windows操作系统的大多数的配置信息,如磁盘、网卡、BIOS信息等。...通过微软提供的WMITOOLS工具,可以通过图形化界面查看各WMI类的方法和实例,下图左侧显示了一些WMI的类,右侧显示了Win32_FAN这个类的一个实例。 ?...类似于读取指定网卡的配置信息的需求,只能对select查询进行AND过滤,但一定程度上会影响查询效率。需要具体评估或采取用户自定义参数的方式提高效率。...由于Zabbix Timeout最长为60s,在实际使用中,发现部分WMI类的SELECT会超过60s,从而导致超时无法获取数据,这是由于WMI本身的限制导致的。在这种情况下,建议使用用户参数去实现。...而对于一些简单的配置信息(如本文中提到的),可以使用WMI实现。

    84520

    使用 Power Shell 修改 Hyper-V 虚拟机 UUID 的解决方案

    前言 在研究了一下午 k8s 文档的时候,正准备开干,万万没想到一个 uuid 的问题卡了我几个小时,一直想在系统中解决,没想到最后在外部使用PowerSheel解决了,分享记录一二 问题描述与尝试解决...的唯一性 可以使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址 可以使用 sudo cat /sys/class/dmi/id/product_uuid命令对...UUID 尝试了文章引用的国外大佬的工具,发现已经无法运行,好在博主提供了一个可以直接使用的脚本 下面结合个人实践来做一些补充说明 使用 PowerShell 查询虚拟机UUID 系统:win10 HyperV...版本:10.0.19041 虚拟机名称:devops01 通过查询验证可行性,修改名称为自己的虚拟机名,使用 PowerSheel(管理员) 执行命令即可查询到 Get-VM "devops04" |...uuid也已经更新 开机启动使用命令查询Linux发现已经变更,因为UUID的表示形式是不区分大小写的,因此大小写字母的顺序不会影响其唯一性。

    78510

    浅谈无文件攻击

    它推动我们努力研究和开发新的保护功能,以消除攻击的类,并确保恶意软件不会占上风。...检测难点无文件攻击由系统或软件漏洞侵入系统,利用受信任的软件或系统工具来躲避检测,通过注册表实现永久驻留,或者使用 WMI 功能定时自启,同时不断渗透进入其他计算机,利用操作系统特性来达到数据隐身,让基于文件监测的查杀手段失效...防护手段禁用或限制系统内置的工具或脚本,如关闭Office文档的宏功能,禁用或限制Rundll32、Powershell、Mshta等程序的执行。...应用白名单策略,限制可信程序或工具的执行权限,防止恶意代码的注入或执行。启用系统的安全设置,禁用不必要的服务或功能,如PowerShell、宏、WMI等,减少攻击的攻击面。...使用行为分析技术,监测系统的异常行为,如进程注入、注册表修改、网络连接等,及时发现和阻止攻击。使用内存取证技术,分析内存中的恶意代码,提取攻击的特征和证据,追踪攻击的来源和目的。

    24810

    WMI技术介绍和应用——WMI概述

    WMI使用了这两个标准实现相关功能,我们将在之后的应用章节介绍它们。WBEM倡议目前已经得到微软、甲骨文、惠普等大公司的支持。        ...从Win2K系统开始,系统就自带了WMI,并且WMI成为系统的一个重要组件。随着Xp、2003、Vista、Win7等的发布,WMI所能提供的功能也在不断的增强和完善中。...使用WMI技术主要分为两个大的方面:1 获取信息;2 提供数据。其中“获取信息”需要WMI Classes(以后称为WMI类)。“提供数据”需要WMI Provider(以后称为WMI提供者)。...如果我们是C++程序员,我们可以通过COM技术直接与下层通信。而脚本语言则要支持WMI Scripting API,间接与下层通信。...对于.net平台语言,则要使用System.Management域相关功能与下层通信。这些WMI的使用者,可以查询、枚举数据,也可以运行Provider的方法,还可以向WMI订阅消息。

    2.5K20

    WMI使用技巧集

    " 检测瓶颈或故障。  " 管理和配置应用程序。  " 查询应用程序数据(使用对象关系的遍历和查询)。  " 执行无缝的本地或远程管理操作。 ..." 对象管理器  提供程序与客户端之间的中间装置,它提供一些关键服务,如标准事件发布和预订、事件筛选、查询引擎等。 ...在 .NET 框架中,System.Management 命名空间提供了用于遍历 WMI 架构的公共类。 除了 .NET 框架,还需要在计算机上安装 WMI 才能使用该命名空间中的管理功能。...此命名空间包括下列支持 WMI 操作的第一级类对象:  " ManagementObject 或 ManagementClass:分别为单个管理对象或类。 ...例如,WMI 广泛利用 .NET 集合类并使用推荐的编码模式,如 .NET 异步操作的“委托”模式。因此,使用 .NET 框架的开发人员可以使用他们的当前技能访问有关计算机或应用程序的管理信息。

    84520

    WMI技术介绍和应用——执行方法

    在之前的博文中,我们主要介绍了如何使用WMI查询信息和接收事件。本文将介绍WMI的另一种用法——执行方法。...技术介绍和应用——VC开发WMI应用的基本步骤》中介绍的基类CWMI,在继承类中重写Excute函数,实现执行方法的功能。        ...在构造函数中,我们需要传入WMI类名(非C++类名),调用方法名,返回值名,参数map。        ...在执行的主体函数Excute中,我们首先使用WMI类名获取类 HRESULT CExcuteMethod::Excute( CComPtr pSvc ) { HRESULT...这儿有个地方需要注意下,就是调用ExecMethod方式存在两种方式: 类的静态方法直接使用类名调用 类的非静态方法使用对象名调用,这种调用我们将在之后的讲解WMI Provider时介绍。

    70610

    狩猎二进制重命名

    在此示例中,利用实时“外部” WMI 事件触发器进行进程执行监控,从所有执行的进程中收集进程 ID。Win32_Process 的查询可以进一步提供有关进程的元数据,收集 PE 属性便于检测。...局限 使用WMI事件作为事件来源的一个局限是通常不能得到成熟的检测用例需要的所有数据。为了丰富数据,需要查询Win32_Process类。...在我自己的测试中,非常短暂的命令(如重命名命令 cdm /c echo )无法生成WMI数据,在本地ping事件记录中稍有延迟。...关于项目 这是一个有趣的开源项目,当我发现vbscript具有查询PE属性的功能时,希望其他人也可以更好地利用这个功能。...如正在使用的 pe.versioninfo 的 InternalName 属性: ?

    1.3K20

    PowerShell5.X与WMI的集成 专题系列分享 第一部分

    众所周知,在windows10以及Windows Server2016的平台当中,PowerShell5.x已经能够去获取到系 统当中大部分的信息,但有时候仍有一些信息需要借助于调用WMI的类来完成...接下来我们就能通过powershell的命令去完成WMI的查询操作, 去获取到系统当中WMI的实例。...在一些情况中,如果powershell本身提供的命令能 够去获取相应的信息,那也可以使用powershell的方式来完成相应的操作,但是如果powershell对 某些操作没有相关的命令支持,这时便可以通过...Guest False 供来宾访问计算机或访问域的内置帐户 WDAGUtilityAccount False 系统为 Windows Defender 应用程序防护方案管理和使用的用户帐户。...而WMI相对更加成熟,功能更加完善。

    88220
    领券