v2.0.0
This commit is contained in:
commit
e455af7f1f
33 changed files with 8471 additions and 0 deletions
601
agent/wmi_windows.go
Normal file
601
agent/wmi_windows.go
Normal file
|
|
@ -0,0 +1,601 @@
|
|||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
A copy of the License is available at:
|
||||
|
||||
https://license.tacticalrmm.com
|
||||
|
||||
*/
|
||||
|
||||
package agent
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/StackExchange/wmi"
|
||||
rmm "github.com/amidaware/rmmagent/shared"
|
||||
)
|
||||
|
||||
func GetWin32_USBController() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_USBController
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_Processor() ([]interface{}, error) {
|
||||
var (
|
||||
dstEX []rmm.Win32_ProcessorEX
|
||||
dst []rmm.Win32_Processor
|
||||
errEX error
|
||||
errORIG error
|
||||
fallback bool = false
|
||||
)
|
||||
ret := make([]interface{}, 0)
|
||||
q := "SELECT * FROM Win32_Processor"
|
||||
|
||||
errEX = wmi.Query(q, &dstEX)
|
||||
if errEX != nil {
|
||||
errORIG = wmi.Query(q, &dst)
|
||||
if errORIG != nil {
|
||||
return ret, errORIG
|
||||
}
|
||||
}
|
||||
|
||||
if errEX == nil {
|
||||
for _, val := range dstEX {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
fallback = true
|
||||
break
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
if !fallback {
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
if errORIG == nil {
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_DesktopMonitor() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_DesktopMonitor
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_NetworkAdapter() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_NetworkAdapter
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_DiskDrive() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_DiskDrive
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_ComputerSystemProduct() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_ComputerSystemProduct
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_BIOS() ([]interface{}, error) {
|
||||
var (
|
||||
dstEX []rmm.Win32_BIOSEX
|
||||
dst []rmm.Win32_BIOS
|
||||
errEX error
|
||||
errORIG error
|
||||
fallback bool = false
|
||||
)
|
||||
ret := make([]interface{}, 0)
|
||||
q := "SELECT * FROM Win32_BIOS"
|
||||
|
||||
errEX = wmi.Query(q, &dstEX)
|
||||
if errEX != nil {
|
||||
errORIG = wmi.Query(q, &dst)
|
||||
if errORIG != nil {
|
||||
return ret, errORIG
|
||||
}
|
||||
}
|
||||
|
||||
if errEX == nil {
|
||||
for _, val := range dstEX {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
fallback = true
|
||||
break
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
if !fallback {
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
if errORIG == nil {
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_ComputerSystem() ([]interface{}, error) {
|
||||
var (
|
||||
dstEX []rmm.Win32_ComputerSystemEX
|
||||
dst []rmm.Win32_ComputerSystem
|
||||
errEX error
|
||||
errORIG error
|
||||
fallback bool = false
|
||||
)
|
||||
ret := make([]interface{}, 0)
|
||||
q := "SELECT * FROM Win32_ComputerSystem"
|
||||
|
||||
errEX = wmi.Query(q, &dstEX)
|
||||
if errEX != nil {
|
||||
errORIG = wmi.Query(q, &dst)
|
||||
if errORIG != nil {
|
||||
return ret, errORIG
|
||||
}
|
||||
}
|
||||
|
||||
if errEX == nil {
|
||||
for _, val := range dstEX {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
fallback = true
|
||||
break
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
if !fallback {
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
if errORIG == nil {
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_NetworkAdapterConfiguration() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_NetworkAdapterConfiguration
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_PhysicalMemory() ([]interface{}, error) {
|
||||
var (
|
||||
dstEX []rmm.Win32_PhysicalMemoryEX
|
||||
dst []rmm.Win32_PhysicalMemory
|
||||
errEX error
|
||||
errORIG error
|
||||
fallback bool = false
|
||||
)
|
||||
ret := make([]interface{}, 0)
|
||||
q := "SELECT * FROM Win32_PhysicalMemory"
|
||||
|
||||
errEX = wmi.Query(q, &dstEX)
|
||||
if errEX != nil {
|
||||
errORIG = wmi.Query(q, &dst)
|
||||
if errORIG != nil {
|
||||
return ret, errORIG
|
||||
}
|
||||
}
|
||||
|
||||
if errEX == nil {
|
||||
for _, val := range dstEX {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
fallback = true
|
||||
break
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
if !fallback {
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
if errORIG == nil {
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_OperatingSystem() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_OperatingSystem
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_BaseBoard() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_BaseBoard
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func GetWin32_VideoController() ([]interface{}, error) {
|
||||
var dst []rmm.Win32_VideoController
|
||||
ret := make([]interface{}, 0)
|
||||
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
err := wmi.Query(q, &dst)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
for _, val := range dst {
|
||||
b, err := json.Marshal(val)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
// this creates an extra unneeded array but keeping for now
|
||||
// for backwards compatibility with the python agent
|
||||
tmp := make([]interface{}, 0)
|
||||
var un map[string]interface{}
|
||||
if err := json.Unmarshal(b, &un); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
tmp = append(tmp, un)
|
||||
ret = append(ret, tmp)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (a *Agent) GetWMIInfo() map[string]interface{} {
|
||||
wmiInfo := make(map[string]interface{})
|
||||
|
||||
compSysProd, err := GetWin32_ComputerSystemProduct()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
compSys, err := GetWin32_ComputerSystem()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
netAdaptConfig, err := GetWin32_NetworkAdapterConfiguration()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
physMem, err := GetWin32_PhysicalMemory()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
winOS, err := GetWin32_OperatingSystem()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
baseBoard, err := GetWin32_BaseBoard()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
bios, err := GetWin32_BIOS()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
disk, err := GetWin32_DiskDrive()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
netAdapt, err := GetWin32_NetworkAdapter()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
desktopMon, err := GetWin32_DesktopMonitor()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
cpu, err := GetWin32_Processor()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
usb, err := GetWin32_USBController()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
graphics, err := GetWin32_VideoController()
|
||||
if err != nil {
|
||||
a.Logger.Debugln(err)
|
||||
}
|
||||
|
||||
wmiInfo["comp_sys_prod"] = compSysProd
|
||||
wmiInfo["comp_sys"] = compSys
|
||||
wmiInfo["network_config"] = netAdaptConfig
|
||||
wmiInfo["mem"] = physMem
|
||||
wmiInfo["os"] = winOS
|
||||
wmiInfo["base_board"] = baseBoard
|
||||
wmiInfo["bios"] = bios
|
||||
wmiInfo["disk"] = disk
|
||||
wmiInfo["network_adapter"] = netAdapt
|
||||
wmiInfo["desktop_monitor"] = desktopMon
|
||||
wmiInfo["cpu"] = cpu
|
||||
wmiInfo["usb"] = usb
|
||||
wmiInfo["graphics"] = graphics
|
||||
|
||||
return wmiInfo
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue