我目前正在寻找用等效的 win32 api 调用替换我所有使用 WMI 的代码。我这样做是因为我注意到 WMI 调用比 win32 api 调用花费的时间多。下面是一些示例:
上市服务:
- wmi:~4 秒
- winapi:~0.003 秒
列出打印机:
- wmi:~0.5 秒
- winapi:~0.009 秒
列出 Windows 用户:
- wmi:~0.5 秒
- winapi:~0.2 秒
是否可以替换所有 wmi 调用?作为一般规则,是否可以使用 winapi 调用执行 WMI 中可用的每项任务?
我已经设法替换了我的大部分 wmi 代码,但我还剩下以下代码:
- 创建还原点
- 枚举网络适配器
- 枚举分区
我在枚举网络适配器方面遇到了一些困难。
还值得一提的是,我正在使用 python (2.7) 执行所有这些调用(使用 ctypes、windll 和 win32 api 库,例如 win32net、win32service 等...)。
最佳答案
问:是否可以替换所有wmi调用?
A:除了少数异常(exception),大多数 WMI 查询都可以用 WinAPI 方法替换。
问:一般来说,WMI 中可用的每项任务都可以通过 winapi 调用来执行吗?
A:不,并非所有 WMI 类都有 WinAPI 等价物。例如,IIS 相关任务只能使用 IIS WMI Provider 执行.此外,没有用于枚举还原点等的 WinAPI 方法。
对于待处理的任务,您可以使用这些 WinAPI 方法:
- 创建还原点 - System Restore Functions
- 枚举网络适配器 -
GetAdaptersInfo
功能 - 枚举分区 - 使用
DeviceIoControl
方法与 IOCTL_DISK_GET_DRIVE_LAYOUT_EX控制代码
关于python - 用 Winapi 替换 WMI 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17651983/