Files
scrutiny/vendor/github.com/jaypipes/ghw/memory_windows.go
T
2020-08-21 06:31:48 +00:00

71 lines
2.2 KiB
Go

//
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//
package ghw
import (
"github.com/StackExchange/wmi"
)
const wqlOperatingSystem = "SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem"
type win32OperatingSystem struct {
TotalVisibleMemorySize *uint64
}
const wqlPhysicalMemory = "SELECT BankLabel, Capacity, DataWidth, Description, DeviceLocator, Manufacturer, Model, Name, PartNumber, PositionInRow, SerialNumber, Speed, Tag, TotalWidth FROM Win32_PhysicalMemory"
type win32PhysicalMemory struct {
BankLabel *string
Capacity *uint64
DataWidth *uint16
Description *string
DeviceLocator *string
Manufacturer *string
Model *string
Name *string
PartNumber *string
PositionInRow *uint32
SerialNumber *string
Speed *uint32
Tag *string
TotalWidth *uint16
}
func (ctx *context) memFillInfo(info *MemoryInfo) error {
// Getting info from WMI
var win32OSDescriptions []win32OperatingSystem
if err := wmi.Query(wqlOperatingSystem, &win32OSDescriptions); err != nil {
return err
}
var win32MemDescriptions []win32PhysicalMemory
if err := wmi.Query(wqlPhysicalMemory, &win32MemDescriptions); err != nil {
return err
}
// We calculate total physical memory size by summing the DIMM sizes
var totalPhysicalBytes uint64
info.Modules = make([]*MemoryModule, 0, len(win32MemDescriptions))
for _, description := range win32MemDescriptions {
totalPhysicalBytes += *description.Capacity
info.Modules = append(info.Modules, &MemoryModule{
Label: *description.BankLabel,
Location: *description.DeviceLocator,
SerialNumber: *description.SerialNumber,
SizeBytes: int64(*description.Capacity),
Vendor: *description.Manufacturer,
})
}
var totalUsableBytes uint64
for _, description := range win32OSDescriptions {
// TotalVisibleMemorySize is the amount of memory available for us by
// the operating system **in Kilobytes**
totalUsableBytes += *description.TotalVisibleMemorySize * uint64(KB)
}
info.TotalUsableBytes = int64(totalUsableBytes)
info.TotalPhysicalBytes = int64(totalPhysicalBytes)
return nil
}