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

即使WMI已被弃用,我仍然可以使用WMI Com API for C++来获取CPU使用率吗?

WMI(Windows Management Instrumentation)是一种用于管理和监控Windows操作系统的技术。虽然WMI已被弃用,但仍然可以使用WMI Com API for C++来获取CPU使用率。

WMI Com API for C++是一组用于访问WMI功能的编程接口,它允许开发人员使用C++语言来编写代码,以获取系统信息和执行管理任务。通过使用WMI Com API for C++,可以通过查询WMI命名空间和类来获取CPU使用率。

获取CPU使用率的一种常见方法是使用Win32_PerfFormattedData_PerfOS_Processor类。该类提供了有关处理器性能的信息,包括CPU使用率。可以通过执行WQL(WMI查询语言)查询来获取此信息。

以下是一个示例代码片段,展示了如何使用WMI Com API for C++来获取CPU使用率:

代码语言:txt
复制
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>

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

int main()
{
    HRESULT hres;

    // 初始化COM库
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres))
    {
        std::cout << "Failed to initialize COM library. Error code: " << hres << std::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))
    {
        std::cout << "Failed to initialize security. Error code: " << hres << std::endl;
        CoUninitialize();
        return 1;
    }

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

    IWbemServices* pSvc = NULL;
    hres = pLoc->ConnectServer(
        _bstr_t(L"ROOT\\CIMV2"),
        NULL,
        NULL,
        0,
        NULL,
        0,
        0,
        &pSvc
    );
    if (FAILED(hres))
    {
        std::cout << "Failed to connect to WMI service. Error code: " << hres << std::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))
    {
        std::cout << "Failed to set proxy blanket. Error code: " << hres << std::endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;
    }

    // 执行WQL查询
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
        bstr_t("WQL"),
        bstr_t("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
        NULL,
        &pEnumerator
    );
    if (FAILED(hres))
    {
        std::cout << "Failed to execute WQL query. Error code: " << hres << std::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"PercentProcessorTime", 0, &vtProp, 0, 0);
        if (SUCCEEDED(hres))
        {
            std::cout << "CPU Usage: " << vtProp.uintVal << "%" << std::endl;
        }

        VariantClear(&vtProp);
        pclsObj->Release();
    }

    // 释放资源
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    CoUninitialize();

    return 0;
}

上述代码使用WMI Com API for C++连接到WMI服务,并执行了一个WQL查询,获取了Win32_PerfFormattedData_PerfOS_Processor类的信息,包括CPU使用率。最后,通过遍历查询结果,将CPU使用率打印出来。

对于腾讯云相关产品,推荐使用云服务器(CVM)来运行上述代码。云服务器提供了高性能的计算资源,适合运行各种应用程序和服务。您可以在腾讯云官网(https://cloud.tencent.com/)了解更多关于云服务器的信息。

请注意,以上答案仅供参考,具体实现方式可能因环境和需求而异。建议在实际开发中参考相关文档和官方资源,并根据具体情况进行调整和优化。

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

相关·内容

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

我们可以通过WMI脚本或者应用程序去管理本地或者远程计算机上的资源。对于VC和汇编程序员,想获取诸如CPU序列号和硬盘序列号等信息是非常容易的。...应用程序和脚本语言使用这套接口集去完成任务,而不是直接通过Windows API。可能有人要问,为什么不让设计的脚本直接在底层使用Windows API,而非要弄个新的技术呢?...如果我们是C++程序员,我们可以通过COM技术直接与下层通信。而脚本语言则要支持WMI Scripting API,间接与下层通信。...之后,我们将优先介绍访问WMI存储库获取有用的信息。 WMI服务扮演着WMi提供者、管理应用和WMI存储库之间的协调者角色。一般来说,它是通过一个共享的服务进程SVCHOST实施工作的。...当第一个管理应用向WMI命名空间发起连接时,WMI服务将会启动。当管理应用不再调用WMI时,WMI服务将会关闭或者进入低内存状态。如我们上图所示,WMI服务和上层应用之间是通过COM接口实现的。

2.5K20
  • 规避检测(共五章):第五章

    \n"); 我们还可以使用我们自己的GetTickCount实现检测睡眠跳过。在下一个代码示例中,我们将直接从 KUSER_SHARED_DATA 结构获取即时报价计数。...我们可以通过比较上次启动时间的两个值检测沙箱,这两个值是通过 WMI 和 NtQuerySystemInformation(SystemTimeOfDayInformation 获取的: bool check_last_boot_time...WMI 使用 COM 接口及其方法。 标准 COM 函数用于处理查询。它们按下面描述的顺序调用,可以分为 6 个步骤。 1....但是,“Win32_ScheduledJob” WMI 类旨在与 AT 命令一起使用,该命令自 Windows 8 起已。...此外,上次启动时间中的任何异常都可以用作沙盒指示器: 系统正常运行时间过长(数月甚至数年) 系统正常运行时间很短(不到几分钟) 使用其他方法获取的上次启动时间与使用 WMI 获取的上次启动时间不同 strComputer

    31020

    使用Powershell 获取内网服务器信息和状态

    ,那个年代想在 Powershell 中获取网卡信息,就得靠 Powershell 调用 WMI完成了。...其实我们可以通过Powershell的方法获取具体命令空间下的所有类,使用到命令为 Get-CimClass,它是由 CimCmdlets Module 提供的。...这 一个问题,即使你曾经用过,也是不可能一下就记起来的,最简单的办法,当然还是 google.com 搜索 了,比如,我们可以搜索 network adapter wmi class,多搜几次,一定会有的...接下来我们将使用如下 WMI 类分别获取 CPU,内存,磁盘,网卡,操作系统等基本信息 ?...有了 WMI 类的信息后,我们就可以使用 Powershell 提供的 Get-CimInstance 命令调用类获取当前系统 中的不同组件信息了。

    2.3K40

    狩猎二进制重命名

    局限 使用WMI事件作为事件来源的一个局限是通常不能得到成熟的检测例需要的所有数据。为了丰富数据,需要查询Win32_Process类。...第二个局限是性能,虽然自己构建的测试中没有资源密集的例,但生产中可能存在其他限制。过滤了进程事件,但希望你在部署的时候进行针对性的测试。...列出的程序列表可能需要对匹配逻辑进行一些调整兼容不同的主机环境。 最后,众所周知,WMI事件处理器是难以管理的。...利用 Powershell 与本地 Windows API 可以显著优化性能,其他优化措施是将 CPU 优先级设置为仅空闲,并仔细设计逻辑有效过滤,以最小化占用资源。...作为目标检测的一部分,围绕性能的其他优化也可以是针对特定感兴趣的位置的查询。 要记住使用 Powershell 方法利用 Windows API

    1.3K20

    WMI使用技巧集

    WMI使用技巧集 很多的朋友对WMI可能见过但理解不深,也是十分想了解关于WMI的知识,可一直找不运维... 获取远程机器的目录以及文件.比如如何列出一个目录下的所有文件,或者所有子目录;如何删除,舔加,更改文件?...13、 一些技巧 使用WMI可以取出网卡的MAC地址,CPU的系列号,主板的系列号,其中主板的系列号已经核对过没有错的,其余的有待于验证,因为使用的是笔记本,笔记本背面有一个主板的系列号,所以可以肯定主板系列号没有问题...请参见 使用 WMI 管理应用程序 | 检索管理对象的集合 | 查询管理信息 | 预订和使用管理事件 | 执行管理对象的方法 | 远程处理和连接选项 | 使用强类型对象 获取CPU序列号代码 string...到了.NET,微软提供了更为丰富的类,有很多以前要调用API的方法可以在.NET中轻而易举的调用实现。

    82720

    服务器性能监视器_性能计数器感叹号

    文章来源:http://blog.csdn.net/lhfzd2004/article/details/1722379 上一篇文章《服务器性能监控之WMI》介绍了通过远程com获取服务器性能(当然也可用于本地...打开管理工具–>性能,我们可以立即看到服务器的CPU,进程运行时间,磁盘容量等性能参数走势图。...获取CPU利用率 #region 获取CPU利用率 public static string getCpuUsage() …{ string used =...pc.NextValue().ToString(); return used; } #endregion 获取内存使用率 #region 获取内存使用率...,我们可以获取更多的性能以及进程运行的情况,但是要说明的一点是,所获取的数据必定是windows服务所提供的,当然我们也可以自己写一些windows服务,添加到系统performancecounter中

    71320

    C#通过获取快捷方式指向目标的小示例触碰WMI

    市面上常见的方法是通过Windows Script Host Object Model这个COM组件完成。...Anyway~今天说的是另一个途径——WMI(Windows Management Instrumentation),这个东东了解不深,只知道很强大,几乎涉及win系统软硬件资源的方方面面,使用一种叫...WQL的查询语言(SQL它妹)获取资源信息,也是现学现用,抛砖引玉,告知还不知道的童鞋们除了Win32 API,还有WMI这货可以解决某些.Net解决不了的问题,所以~WMI大牛撸过即可。...目前倾向用数据库的结构理解它:WMI就好比一个SQL实例,不同的命名空间就是SQL实例上不同的库,而WMI的类就是库里面的表,类的属性就是表里的字段,其余的方法什么的目前还没概念,就不妄言了。...,好在这儿可以下:http://www.softpedia.com/get/System/System-Info/SAPIEN-WMI-Explorer.shtml

    64420

    PS常用命令之系统WMI查看和操作相关命令

    WMI有一组API我们不管使用VBScript、PowerShell脚本还是利用C#的来访问WMI的类库,都是因为WMI向外暴露的一组API。...当然也可以把一个大型系统建立在WMI以及WMI的提供程序之上 Q: WMI 可以做什么? 答: 通过使你的驱动程序成为 WMI 提供程序,你可以: 使自定义数据可用于 WMI 使用者。...允许 WMI 使用者通过标准接口而不是自定义控制面板应用程序配置设备。 通知驱动程序定义事件的 WMI 使用者,无需使用者轮询或发送 Irp。...通过只收集请求的数据并将其发送到单个目标减少驱动程序开销。 描述性驱动程序定义的类名和可选说明注释数据和事件块,然后 WMI 客户端可以枚举并显示给用户。...-Filter: WMI查询语言WQL的语法, 指定要用作筛选器的Where子句, 使用WMI查询语言(WQL)的语法。

    1.4K10

    WMI讲解(是什么,做什么,为什么)

    ,同样我们也可以使用下图理解。...WMI Consumers(WMI使用者) 它位于WMI构架的最顶层,是WMI技术使用的载体。 如果我们是C++程序员,我们可以通过COM技术直接与下层通信。...这些WMI使用者,可以查询、枚举数据,也可以运行Provider的方法,还有WMI事件通知。当然这些数据操作都是要有相应的Provider提供。...当管理应用不再调用WMI时,WMI服务将会关闭或者进入低内存状态。如我们上图所示,WMI服务和上层应用之间是通过COM接口实现的。...注意: 在上图中我们可以发现也可以理解,不论Powershell、VBScript或者其他什么语言,其本质还是使用.NET来访问WMI的类库,都是因为WMI向外暴露的一组API,然后进行管理,Powershell

    1.3K10

    DevOpt:WMIC命令使用技巧

    在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如SMS,或者使用WMI的脚本编程API,或者使用象CIM Studio之类的工具。...如果不熟悉C++之类的编程语言或VBScript之类的脚本语言,或者不掌握WMI名称空间的基本知识,要用WMI管理系统是很困难的。WMIC改变了这种情况。...该组件默认集成于 Windows XP - Windows 10 全系列系统中,我们可以通过 WMI 实现数据的收集与管理,包括提供注册、请求传送、远程管理、安全管理、查询能力、和脚本编程能力等,其设计初衷之一是为了管理员能更加方便的对远程...135端口是否开启,如果上方可以正常访问,那我们就可以继续了,你也可以使用Python写一个脚本,爆破目标主机的密码,替换上方的user,password字段内容。.../shellcode.txt') 3.也可以获取到系统的进程相关信息如下所示,当然你也可以指定节点,实现查看远程主机情况。

    11310

    java 调用win32 api 学习总结

    官网使用参考:http://www.jinvoke.com/calling-the-win32-api-from-java 一个弹出框的例子(这种代码用于调用任何dll,不只是windows的,也可以是自己写的...6 生成win32 dll ,就可以被java调用 了 ======== 使用 J-Interop 在 Java 中调用WMI 有关WMI的小知识 Windows管理规范(WMI)是微软对来自分布式管理任务组...其中,更喜欢J-Interop,因为它是完全免费和开源的API。它提供了没有任何依赖的纯DCOM桥,完全Java编写的没有任何JNI代码。...这个例子利用J-Interop的API使用Win32_Service类解释WMI操作,将启动和停止在这个例子中的窗口服务。...二.在程序jawin调用window的dll jawin 可以对dll中的方法进行调用,也可以调用com中的方法.内部还提供了一个工具,直接对 com组件导出成 java的类,个人认为很方便。

    2.1K30

    WMIC命令的利用技巧

    在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如SMS,或者使用WMI的脚本编程API,或者使用象CIM Studio之类的工具。...如果不熟悉C++之类的编程语言或VBScript之类的脚本语言,或者不掌握WMI名称空间的基本知识,要用WMI管理系统是很困难的。WMIC改变了这种情况。...该组件默认集成于 Windows XP - Windows 10 全系列系统中,我们可以通过 WMI 实现数据的收集与管理,包括提供注册、请求传送、远程管理、安全管理、查询能力、和脚本编程能力等,其设计初衷之一是为了管理员能更加方便的对远程...135端口是否开启,如果上方可以正常访问,那我们就可以继续了,你也可以使用Python写一个脚本,爆破目标主机的密码,替换上方的user,password字段内容。.../shellcode.txt');\"" 3.也可以获取到系统的进程相关信息如下所示,当然你也可以指定节点,实现查看远程主机情况。

    74430

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

    同时也可以将此技术应用于其他应用的安全对抗方案中。那么如何去准确的监控和收集用户每次点击打开的EXE应用程序信息呢?接下来就进行还原实现下如何准确的监控并收集用户每次点击打开EXE应用程序技术。...5.通过调用 ExecNotificationQuery函数, 进行查询接收事件。 ? 下图这部分代码主要的目的是为了初始化COMWMI的设置。 ?...通过WMI,我们可以获取关于硬件和软件的相关数据,也可以提供关于硬件或软件服务的数据给WMI。...对于使用C++代码实现我们就可以直接通过COM技术直接与下层进行通信。对于.net平台语言,则要使用System.Management域相关功能与下层进行通信。...WMI使用者,可以进行查询、枚举数据,也可以运行Provider的方法,还可以WMI订阅消息。其中这些数据操作都是要有相应的Provider提供。 ? END

    1.5K21

    从远程计算机获取WMI数据

    本文作者:贝多芬不忧伤(Ms08067实验室内网小组成员) 注:这篇帖子需要有一定的c++编程经验的同学来学习和测试。...---- 您可以使用本主题中的过程和代码示例创建完整的WMI客户端应用程序,该应用程序执行COM初始化,连接到远程计算机上的WMI,半同步获取数据,然后清理。...从远程计算机获取WMI数据 通过调用CoInitializeEx初始化COM参数。 通过调用CoInitializeSecurity初始化COM进程安全性。...设置IWbemServices代理安全性,以便WMI服务可以通过调用CoSetProxyBlanket模拟客户端。 使用IWbemServices指针发出WMI请求。...使用IWbemClassObject :: Get方法从数据对象获取所需的信息。 下面的代码示例演示如何从远程计算机半同步获取WMI数据。 ---- 下面给出了一个外链。

    2.2K10

    如何在远程系统执行程序

    Task Scheduler服务 2、psexec PsTools工具之一,在指定的一台或多台计算机上运行应用程序 条件: 需要开放ADMIN$共享 3、WMIC 功能强大,可做系统管理、远程主机信息获取...条件: 启动WMI服务,开放135端口 本地安全策略的“网络访问: 本地账户的共享和安全模式”应设为“经典-本地用户以自己的身份验证” 4、wmiexec 使用VBS脚本调用WMI模拟psexec的功能...,判断WMI服务被禁用 ?...分析 整理下目前掌握的目标主机信息: 目标主机: 1、已获得登陆用户名及口令 2、可以net use连接 3、开放共享C 但是: 1、默认admin$共享关闭,无法使用psexec 2、Task scheduler...终于在GitHub上面找到了一个smbexec的c++参考资料,作为工具改进模版 模版下载地址: https://github.com/sunorr/smbexec 总结 这篇文章共列举了六种远程执行程序的方法

    1.6K20

    挖矿木马详解

    挖矿木马自查 挖矿木马自查 发现挖矿 CPU使用率 通常对挖矿木马的感知,主要表现在主机的使用感上,在主机正常运行的情况下,突然变得卡顿,并且CPU使用率高于正常使用时的数值或达到了100%: 感知产品...当然,仅从卡顿和CPU使用率判断是否中了挖矿木马是不准确的,从安全产品上能够更加准确直观的发现挖矿木马。...定位挖矿 普通开源挖矿程序 如果感觉主机突然出现明显的卡顿,可以打开任务管理器,查看CPU使用率,中了挖矿木马时,任务管理器可能会看到存在奇怪的进程,CPU占用率较高,比如下图中,LogonUI.exe...“Xr”的图标: 有时候攻击者为了让挖矿木马不被发现,可能会通过服务等方式启动挖矿程序,这时可以借助内存搜索工具定位进程,使用工具搜索挖矿域名或相关字符串: 内存搜索工具下载链接 64位系统下载链接...网页挖矿的主要特征为,访问挖矿站点时,CPU使用率会剧增,退出挖矿站点访问后,CPU使用率瞬间下降: 网页挖矿脚本的代码中通常会包含“miner”字符串,具有一定的辨识度: 驱动挖矿 驱动挖矿是指挖矿木马通过注册驱动的方式驻留在系统中以确保持久性

    12K61

    WMI ——重写版

    为了验证上面描述的一些内容,建议WmiExplorer进行查看: ? 可以注意到前面描述中的Namespace、Class、Properties、Methods……。...* COM API“和”.NET System.Management classes“没有试过,其余的工具均有测试,推荐使用WMI Explorer ,GUI界面非常好用。...MSDN有提到“wmic 中的 alias 是对 class 、property、method 的友好重命名”,你可以 wmic alias qfe list brief 验证这一点: ?...笔者的思路为:注册对应的WMI 永久事件订阅,监控对应的事件,动作设置为写入日志或其他(列如通知) 注:删除WMI 永久事件订阅本身也可以触发事件 缓解措施 禁用WMI服务:可以会影响依赖该服务的应用...4625 事件触发,`persistence/elevated/wmi_updater`可以从远程获取 payload,注册的 WMI 永久事件订阅 默认Name 为`AutoUpdater` ##

    2.1K10

    python 获取Linux和Windows硬件信息

    1.使用puppet或者saltstack 2.直接读取/proc/xx文件,比如cpu信息,就是/proc/cpuinfo 3.dmidecode 4.psutil,它可以获取某些信息,但是对于CPU...它提供了一个简单的命令行工具,可以用来检查本地、远程的主机和记录的信息。 sudo 运行该命令以获得最大的信息。 另外,你可以提供服务器 IP 或者主机名、用户名和密码,在远程的服务器上执行它。...输出很清楚和整洁,这是在其他命令中没有看到的。...需要使用其他模块获取 使用下面的命令安装2个模块 pip install wmi pyinstaller 新建一个文件win_sysinfo.py,内容如下: #_*_coding:utf-8_*_... = wmi.WMI()         self.wmi_service_obj = win32com.client.Dispatch("WbemScripting.SWbemLocator")

    6.1K20

    【解析向】腾讯云的Windows Server日志配置收集工具是个什么鬼?(4)

    在传统行业中,要监控硬件或者获取硬件状态,一般需要根据服务器硬件厂商(OEM/ODM)进行按照对应厂商提供的SA(Server Admin)管理套件进行底层串口获取,但是在互联网行业又是怎么做的呢?...\$Dirfilename\;" } 通过wmic接口进行获取,wmic全称The WMI command-line,WMI接口命令行,WMI的作用在前几篇都介绍过,在这里补充一点,WMI可以通过系统接口获取有限的硬件状态...,但是这是从带内接口进行获取,所以工具这里使用WMI接口获取其实不是特别严谨,在不加额外工具的情况下,较可信的获取方式应该是通过SNMP透传过来(带内手段中)。...\$Dirfilename\hardware.txt" } 其中MegaCli工具不单单在Windows中可以使用,也有Linux版本,所以在Raid卡这里采用这个工具会比较通用,在Windows...至此,也可以看到腾讯云Windows Server 日志配置收集工具在硬件收集上的用心,建议有硬件服务器运维需求的读者,可以参照着,对于Windows Server,硬件方面的排错建议结合性能/日志一起看

    79470
    领券