wmi和API有什么区别

时间:2018-09-24 09:44:49

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

我使用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或任何其他方式有什么区别?

感谢您的回应。

4 个答案:

答案 0 :(得分:2)

缺点

  • 速度(主要是劣势)
  • 如果用户关闭wmi服务,则wmi无法正常工作。

优势

  • 包装本地API
  • 更丰富的数据,如果您使用wmi,则可以获得更丰富的数据
  • 标准化,所有“实体”均以标准化方式表示

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

答案 1 :(得分:1)

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

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

鉴于API是Microsoft提供访问本地应用程序信息的途径,您还可以使用这些API来操纵提供的信息。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

您将使用Win32_ComputerSystem class查询Windows Management Instrumentation,这是一项复杂而全面的基础结构服务,可处理Windows上的大多数管理任务。

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