4

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

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

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

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

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

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

坦克你的回应。

4

4 回答 4

5

缺点

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

优势

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

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

于 2018-09-24T10:10:30.117 回答
3

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

使用Win32_ComputerSystem 类,您将查询Windows Management Instrumentation,它是一个复杂而全面的基础设施服务,它处理 Windows 上的大多数管理任务。

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

于 2018-09-24T09:58:38.770 回答
3

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

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

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

于 2018-09-24T09:53:18.877 回答
3

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

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

于 2018-09-24T09:53:44.577 回答