internal/hoststats/mem_windows.go
Rama main · réplica de lectura del repositorio original.
//go:build windows
package hoststats
import (
"fmt"
"unsafe"
"golang.org/x/sys/windows"
)
var (
modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
procGlobalMemoryStatusEx = modkernel32.NewProc("GlobalMemoryStatusEx")
)
type memoryStatusEx struct {
cbSize uint32
dwMemoryLoad uint32
ullTotalPhys uint64
ullAvailPhys uint64
ullTotalPageFile uint64
ullAvailPageFile uint64
ullTotalVirtual uint64
ullAvailVirtual uint64
ullAvailExtendedVirtual uint64
}
func memStats() (used, total int64, err error) {
var m memoryStatusEx
m.cbSize = uint32(unsafe.Sizeof(m))
r, _, callErr := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&m)))
if r == 0 {
return 0, 0, fmt.Errorf("hoststats: GlobalMemoryStatusEx: %w", callErr)
}
total = int64(m.ullTotalPhys)
used = total - int64(m.ullAvailPhys)
if used < 0 {
used = 0
}
return used, total, nil
}