From df2a7a9ec09efc8999647c4f1f97ecb456e54c49 Mon Sep 17 00:00:00 2001 From: Ben Ridley Date: Thu, 18 Mar 2021 15:29:14 -0700 Subject: [PATCH] Remove temporary uintptr values, as the garbage collector can move addresses from under them. Signed-off-by: Ben Ridley --- headers/psapi/psapi.go | 32 ++++++++++++++------------------ headers/sysinfoapi/sysinfoapi.go | 6 ++---- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/headers/psapi/psapi.go b/headers/psapi/psapi.go index c16a42e4..c8ef66b4 100644 --- a/headers/psapi/psapi.go +++ b/headers/psapi/psapi.go @@ -54,11 +54,9 @@ func GetLPPerformanceInfo() (LPPerformanceInformation, error) { var pi LPPerformanceInformation size := (uint32)(unsafe.Sizeof(pi)) pi.cb = size - pPi := uintptr(unsafe.Pointer(&pi)) - r1, _, err := procGetPerformanceInfo.Call(pPi, uintptr(size)) + r1, _, err := procGetPerformanceInfo.Call(uintptr(unsafe.Pointer(&pi)), uintptr(size)) - if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false { - // returned false + if ret := *(*bool)(unsafe.Pointer(&r1)); !ret { return LPPerformanceInformation{}, err } @@ -70,26 +68,24 @@ func GetPerformanceInfo() (PerformanceInformation, error) { var lppi LPPerformanceInformation size := (uint32)(unsafe.Sizeof(lppi)) lppi.cb = size - pLppi := uintptr(unsafe.Pointer(&lppi)) - r1, _, err := procGetPerformanceInfo.Call(pLppi, uintptr(size)) + r1, _, err := procGetPerformanceInfo.Call(uintptr(unsafe.Pointer(&lppi)), uintptr(size)) - if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false { - // returned false + if ret := *(*bool)(unsafe.Pointer(&r1)); !ret { return PerformanceInformation{}, err } var pi PerformanceInformation pi.cb = lppi.cb - pi.CommitTotal = *(*uint32)(unsafe.Pointer(&lppi.CommitTotal)) - pi.CommitLimit = *(*uint32)(unsafe.Pointer(&lppi.CommitLimit)) - pi.CommitPeak = *(*uint32)(unsafe.Pointer(&lppi.CommitPeak)) - pi.PhysicalTotal = *(*uint32)(unsafe.Pointer(&lppi.PhysicalTotal)) - pi.PhysicalAvailable = *(*uint32)(unsafe.Pointer(&lppi.PhysicalAvailable)) - pi.SystemCache = *(*uint32)(unsafe.Pointer(&lppi.SystemCache)) - pi.KernelTotal = *(*uint32)(unsafe.Pointer(&lppi.KernelTotal)) - pi.KernelPaged = *(*uint32)(unsafe.Pointer(&lppi.KernelPaged)) - pi.KernelNonpaged = *(*uint32)(unsafe.Pointer(&lppi.KernelNonpaged)) - pi.PageSize = *(*uint32)(unsafe.Pointer(&lppi.PageSize)) + pi.CommitTotal = *(lppi.CommitTotal) + pi.CommitLimit = *(lppi.CommitLimit) + pi.CommitPeak = *(lppi.CommitPeak) + pi.PhysicalTotal = *(lppi.PhysicalTotal) + pi.PhysicalAvailable = *(lppi.PhysicalAvailable) + pi.SystemCache = *(lppi.SystemCache) + pi.KernelTotal = *(lppi.KernelTotal) + pi.KernelPaged = *(lppi.KernelPaged) + pi.KernelNonpaged = *(lppi.KernelNonpaged) + pi.PageSize = *(lppi.PageSize) pi.HandleCount = lppi.HandleCount pi.ProcessCount = lppi.ProcessCount pi.ThreadCount = lppi.ThreadCount diff --git a/headers/sysinfoapi/sysinfoapi.go b/headers/sysinfoapi/sysinfoapi.go index 8ea8ff67..7bfb5f85 100644 --- a/headers/sysinfoapi/sysinfoapi.go +++ b/headers/sysinfoapi/sysinfoapi.go @@ -111,8 +111,7 @@ var ( func GlobalMemoryStatusEx() (MemoryStatus, error) { var mse memoryStatusEx mse.dwLength = (uint32)(unsafe.Sizeof(mse)) - pMse := uintptr(unsafe.Pointer(&mse)) - r1, _, err := procGlobalMemoryStatusEx.Call(pMse) + r1, _, err := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&mse))) if ret := *(*bool)(unsafe.Pointer(&r1)); ret == false { return MemoryStatus{}, err @@ -134,8 +133,7 @@ func GlobalMemoryStatusEx() (MemoryStatus, error) { // https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsysteminfo func GetSystemInfo() SystemInfo { var info lpSystemInfo - pInfo := uintptr(unsafe.Pointer(&info)) - procGetSystemInfo.Call(pInfo) + procGetSystemInfo.Call(uintptr(unsafe.Pointer(&info))) fmt.Printf("%+v", info) return SystemInfo{ Arch: ProcessorArchitecture(info.Arch.WProcessorArchitecture),