memtotal_windows.go 636 B

1234567891011121314151617181920212223
  1. package sysinfo
  2. import (
  3. "syscall"
  4. "unsafe"
  5. )
  6. // PhysicalMemoryBytes returns the total amount of host memory.
  7. func PhysicalMemoryBytes() (uint64, error) {
  8. // https://msdn.microsoft.com/en-us/library/windows/desktop/cc300158(v=vs.85).aspx
  9. // http://stackoverflow.com/questions/30743070/query-total-physical-memory-in-windows-with-golang
  10. mod := syscall.NewLazyDLL("kernel32.dll")
  11. proc := mod.NewProc("GetPhysicallyInstalledSystemMemory")
  12. var memkb uint64
  13. ret, _, err := proc.Call(uintptr(unsafe.Pointer(&memkb)))
  14. // return value TRUE(1) succeeds, FAILED(0) fails
  15. if ret != 1 {
  16. return 0, err
  17. }
  18. return memkb * 1024, nil
  19. }