Address GitHub feedback

- Defer registry close calls
- Ensure size parameter in GetComputerName is properly specified
- Clean up some comments to ensure correctness

Signed-off-by: Ben Ridley <benridley29@gmail.com>
This commit is contained in:
Ben Ridley 2021-03-29 10:12:20 -07:00
parent ee3848141c
commit 33c6b2c6a5
3 changed files with 7 additions and 11 deletions

View File

@ -173,6 +173,8 @@ func (c *OSCollector) collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) (
// Get total allocation of paging files across all disks. // Get total allocation of paging files across all disks.
memManKey, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management`, registry.QUERY_VALUE) memManKey, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management`, registry.QUERY_VALUE)
defer memManKey.Close()
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -181,15 +183,14 @@ func (c *OSCollector) collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) (
return nil, err return nil, err
} }
if err := memManKey.Close(); err != nil {
return nil, err
}
// Get build number and product name from registry // Get build number and product name from registry
ntKey, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) ntKey, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
defer ntKey.Close()
if err != nil { if err != nil {
return nil, err return nil, err
} }
pn, _, err := ntKey.GetStringValue("ProductName") pn, _, err := ntKey.GetStringValue("ProductName")
if err != nil { if err != nil {
return nil, err return nil, err
@ -200,10 +201,6 @@ func (c *OSCollector) collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) (
return nil, err return nil, err
} }
if err := ntKey.Close(); err != nil {
return nil, err
}
var fsipf float64 = 0 var fsipf float64 = 0
for _, pagingFile := range pagingFiles { for _, pagingFile := range pagingFiles {
fileString := strings.ReplaceAll(pagingFile, `\??\`, "") fileString := strings.ReplaceAll(pagingFile, `\??\`, "")

View File

@ -73,7 +73,6 @@ func netApiBufferFree(buffer *wKSTAInfo102) {
} }
// NetWkstaGetInfo returns information about the configuration of a workstation. // NetWkstaGetInfo returns information about the configuration of a workstation.
// WARNING: The caller must call netApiBufferFree to free the memory allocated by this function.
// https://docs.microsoft.com/en-us/windows/win32/api/lmwksta/nf-lmwksta-netwkstagetinfo // https://docs.microsoft.com/en-us/windows/win32/api/lmwksta/nf-lmwksta-netwkstagetinfo
func netWkstaGetInfo() (*wKSTAInfo102, uint32, error) { func netWkstaGetInfo() (*wKSTAInfo102, uint32, error) {
var lpwi *wKSTAInfo102 var lpwi *wKSTAInfo102

View File

@ -148,12 +148,12 @@ func GetSystemInfo() SystemInfo {
} }
// GetComputerName wraps the GetComputerNameW function in a more Go-like way // GetComputerName wraps the GetComputerNameW function in a more Go-like way
// https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcomputernamew // https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getcomputernameexw
func GetComputerName(f WinComputerNameFormat) (string, error) { func GetComputerName(f WinComputerNameFormat) (string, error) {
// 1kb buffer to accept computer name. This should be more than enough as the maximum size // 1kb buffer to accept computer name. This should be more than enough as the maximum size
// returned is the max length of a DNS name, which this author believes is 253 characters. // returned is the max length of a DNS name, which this author believes is 253 characters.
size := 1024 size := 1024
var buffer [4096]uint16 var buffer [1024]uint16
r1, _, err := procGetComputerNameExW.Call(uintptr(f), uintptr(unsafe.Pointer(&buffer)), uintptr(unsafe.Pointer(&size))) r1, _, err := procGetComputerNameExW.Call(uintptr(f), uintptr(unsafe.Pointer(&buffer)), uintptr(unsafe.Pointer(&size)))
if r1 == 0 { if r1 == 0 {
return "", err return "", err