用Winapi替换WMI调用

时间:2013-07-15 10:24:01

标签: python windows winapi python-2.7 wmi

我目前正在寻找将所有使用WMI的代码替换为等效的win32 api调用。我这样做是因为我注意到WMI调用比win32 api调用更长时间执行。下面是一些例子:

上市服务:

  • wmi:~4秒
  • winapi:~0.003秒

列出打印机:

  • wmi:~0.5秒
  • winapi:〜0.009秒

列出Windows用户:

  • wmi:~0.5秒
  • winapi:~0.2秒

是否可以替换所有wmi电话?作为一般规则,WMI中可用的每个任务都可以使用winapi调用执行吗?

我已经设法替换了我的大部分wmi代码,但我还剩下以下内容:

  • 创建还原点
  • 枚举网络适配器
  • 枚举分区

我特别难以枚举网络适配器。

还值得一提的是我使用python(2.7)执行所有这些调用(使用ctypes,windll和win32 api库,如win32net,win32service等...)。

1 个答案:

答案 0 :(得分:4)

:是否可以替换所有wmi电话?

A :大多数WMI查询可以用WinAPI方法替换,但有一些例外。

:作为一般规则,WMI中的每项任务都可以通过winapi调用执行吗?

A :不,并非所有WMI类都具有WinAPI等效项。例如,只能使用IIS WMI Provider执行与IIS相关的任务。此外,没有WinAPI方法枚举还原点,依此类推。

对于待处理的任务,您可以使用这些WinAPI方法: