我目前正在寻找将所有使用WMI的代码替换为等效的win32 api调用。我这样做是因为我注意到WMI调用多比win32 api调用更长时间执行。下面是一些例子:
上市服务:
列出打印机:
列出Windows用户:
是否可以替换所有wmi电话?作为一般规则,WMI中可用的每个任务都可以使用winapi调用执行吗?
我已经设法替换了我的大部分wmi代码,但我还剩下以下内容:
我特别难以枚举网络适配器。
还值得一提的是我使用python(2.7)执行所有这些调用(使用ctypes,windll和win32 api库,如win32net,win32service等...)。
答案 0 :(得分:4)
问:是否可以替换所有wmi电话?
A :大多数WMI查询可以用WinAPI方法替换,但有一些例外。
问:作为一般规则,WMI中的每项任务都可以通过winapi调用执行吗?
A :不,并非所有WMI类都具有WinAPI等效项。例如,只能使用IIS WMI Provider执行与IIS相关的任务。此外,没有WinAPI方法枚举还原点,依此类推。
对于待处理的任务,您可以使用这些WinAPI方法:
GetAdaptersInfo
功能DeviceIoControl
方法与IOCTL_DISK_GET_DRIVE_LAYOUT_EX控制代码