栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Go查询WMI

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Go查询WMI

从C
++刚刚起步的新世纪开始,您就来到了COM的美好世界,即C语言中的面向对象编程。

在github上,mattn 在Go中集成了一个小包装,我曾经使用它包装了一个快速的示例程序。“
这个存储库是为实验而创建的,应该被认为是不稳定的。 ”灌输了各种各样的信心。

我省去了很多错误检查。当我说时,请相信我,您将想要重新添加。

package mainimport (        "github.com/mattn/go-ole"        "github.com/mattn/go-ole/oleutil")func main() {    // init COM, oh yeah    ole.CoInitialize(0)    defer ole.CoUninitialize()    unknown, _ := oleutil.CreateObject("Wbemscripting.SWbemLocator")    defer unknown.Release()    wmi, _ := unknown.QueryInterface(ole.IID_IDispatch)    defer wmi.Release()    // service is a SWbemServices    serviceRaw, _ := oleutil.CallMethod(wmi, "ConnectServer")    service := serviceRaw.ToIDispatch()    defer service.Release()    // result is a SWBemObjectSet    resultRaw, _ := oleutil.CallMethod(service, "ExecQuery", "SELECt * FROM Win32_Process")    result := resultRaw.ToIDispatch()    defer result.Release()    countVar, _ := oleutil.GetProperty(result, "Count")    count := int(countVar.Val)    for i :=0; i < count; i++ {        // item is a SWbemObject, but really a Win32_Process        itemRaw, _ := oleutil.CallMethod(result, "ItemIndex", i)        item := itemRaw.ToIDispatch()        defer item.Release()        asString, _ := oleutil.GetProperty(item, "Name")        println(asString.ToString())    }}

真正的问题是对ExecQuery的调用,我碰巧从可用的类中获取Win32_Process,因为它易于理解和打印。

在我的机器上,将打印:

System Idle ProcessSystemsmss.execsrss.exewininit.exeservices.exelsass.exesvchost.exesvchost.exeatiesrxx.exesvchost.exesvchost.exesvchost.exesvchost.exesvchost.exespoolsv.exesvchost.exeAppleOSSMgr.exeAppleTimeSrv.exe... and so ongo.exemain.exe

我不是在提升运行状态或未禁用UAC的情况下运行,但某些WMI提供程序将需要特权用户。

我也不是100%不会漏掉一点,您需要深入研究一下。COM对象是按引用计数的,因此

defer
应该很合适(前提是该方法长期运行不会疯狂),但是go-
ole可能有一些我没注意到的魔术。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号