wmi 和 API 有什么不同

what is different between wmi and API

我使用 C++ 编程,我用一个例子来理解我的问题的主要部分。

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

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

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

此外,我们可以按照 here and use Win32_ComputerSystem.UserName 上解释的说明使用 wmi。

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

感谢您的回复。

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

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

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

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

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

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

使用 Win32_ComputerSystem class you are going to query Windows Management Instrumentation,这是一项复杂而全面的基础设施服务,可处理 Windows 上的大部分管理任务。

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

缺点

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

优势

  • 包装原生 API
  • 更丰富的数据,如果使用wmi,可以获得更丰富的数据
  • 标准化,所有'entities'都以标准化的方式表示

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