【问题标题】:what is different between wmi and APIwmi和API有什么区别
【发布时间】:2018-09-24 09:44:49
【问题描述】:

我使用 c++ 编程,我使用一个示例来理解我的问题的主要内容。

假设,我们想在 windows 操作系统中获取当前用户名,我们可以使用以下代码:

#include <windows.h>
#include <Lmcons.h>

char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);

另外,我们可以按照here 上的说明使用 wmi 并使用Win32_ComputerSystem.UserName

所以,我希望你已经完全理解了,wmi和使用api或其他方式有什么不同?

感谢您的回复。

【问题讨论】:

  • 尝试提问 ;)
  • 我猜你可以在文档中找到这些差异...例如 ComputerSystem.UserNameGetUserNameW 的包装器。请注意,返回的字符串是 Unicode,而不是在代码 sn-p 中检索的单字节字符串。

标签: c++ c++11 wmi wmi-service


【解决方案1】:

缺点

  • 速度(主要是劣势)
  • 如果用户关闭 wmi 服务,wmi 将不起作用。

优势

  • 封装原生 API
  • 更丰富的数据,如果使用wmi,可以获得更丰富的数据
  • 标准化,所有“实体”都以标准化方式表示

这些是使用 wmi 最重要的问题。

【讨论】:

  • “更丰富”的数据是什么意思?仅仅是 WMI 提供了更多数据吗?还是别的什么?
  • @user673679 由于程序员可以编写自己的 WMI 提供程序,因此您可以从第三方软件获取数据。这就是微软在其安全中心界面中所做的事情——从第三方防病毒和防火墙软件中获取数据。
【解决方案2】:

Windows Management Instrumentation (WMI) 是 Microsoft 的一组规范,用于整合 Windows 计算系统对网络中设备和应用程序的管理。

它是 Microsoft 实施的基于 Web 的企业管理。 WMI - 服务安装在 Windows 操作系统上,但可以关闭该服务。因此,如果用户禁用该服务,您将不会获得有关系统的任何信息。它仅用于报告目的。

而 API 是 Microsoft 提供对本地应用程序信息的访问权限的方式,以及您还可以如何操作所提供的信息的方式。

【讨论】:

    【解决方案3】:

    WMI 是基于查询的,它的运行速度非常慢,而 API 的运行速度要快得多。 例如:- 如果您想在启动前检查应用程序中的某些系统规范,您最好使用 API。这将使您的应用启动更快。

    WMI 优于 api 调用 WMI 信息更丰富且易于阅读,要获得相同的结果,我们必须进行多次 api 调用。

    【讨论】:

      【解决方案4】:

      GetUserName API 只是对 Advapi32.dll 导出的函数的调用,该函数属于基本内核函数。

      使用Win32_ComputerSystem class,您将查询Windows Management Instrumentation,这是一个复杂而全面的基础设施服务,可处理Windows 上的大部分管理任务。

      向 WMI 发布查询涉及更多资源和执行时间,因此,如果您的目标只是获取 用户名,我建议您依赖 GetUserName API .

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 2015-12-08
        • 2017-12-05
        • 1970-01-01
        • 2017-03-04
        • 2014-10-05
        • 1970-01-01
        • 2020-05-28
        • 2012-08-21
        相关资源
        最近更新 更多