登录
首页 >  Golang >  Go问答

使用 WMI 请求:让进程所有者操作指南

来源:stackoverflow

时间:2024-02-29 13:03:23 125浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《使用 WMI 请求:让进程所有者操作指南》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我尝试使用 go-ole 库接收进程列表:

    package main

    import (
        "fmt"
        "github.com/go-ole/go-ole"
        "github.com/mattn/go-ole/oleutil"
    )


    func main() {
        ole.coinitialize(0)
        defer ole.couninitialize()

        unknown, _ := oleutil.createobject("wbemscripting.swbemlocator")
        defer unknown.release()

        wmi, _ := unknown.queryinterface(ole.iid_idispatch)
        defer wmi.release()

        serviceraw, _ := oleutil.callmethod(wmi, "connectserver")
        service := serviceraw.toidispatch()
        defer service.release()

        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++ {
            itemraw, _ := oleutil.callmethod(result, "itemindex", i)
            item := itemraw.toidispatch()
            defer item.release()

            processname, _ := oleutil.getproperty(item, "name")
            fmt.println(processname.tostring())
        }
    }

但我无法接收进程的所有者,请调用方法getowner

ownerraw, _ := oleutil.callmethod(item, "getowner")
fmt.println(ownerraw)

因为getowner返回值为int32

uint32 GetOwner(
      [out] string User,
      [out] string Domain
    );

https://learn.microsoft.com/en-us/windows/desktop/cimwin32prov/getowner-method-in-class-win32-process

如何才能以字符串形式接收每个进程的所有者?


解决方案


我花了一段时间才弄清楚这一点。

getowner 方法希望您传递两个字符串参数。这些字符串将包含方法调用的结果。

var user ole.variant
var domain ole.variant
res, err := oleutil.callmethod(item, "getowner", &user, &domain)
fmt.printf("user: %v\tdomain: %v", user.tostring(), domain.tostring())

要获取 sid,您需要执行相同的操作:

var sid ole.VARIANT
 res, err := oleutil.CallMethod(item, "GetOwnerSid", &sid)
 fmt.Printf("sid: %v\n", sid.ToString())

终于介绍完啦!小伙伴们,这篇关于《使用 WMI 请求:让进程所有者操作指南》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>