From ad67257ea2c99c1b2dcee517e4d21de0e261592b Mon Sep 17 00:00:00 2001 From: John Howard Date: Fri, 16 Mar 2018 09:47:14 -0700 Subject: [PATCH] Windows: Move kernel_windows to use golang registry functions Signed-off-by: John Howard Upstream-commit: 29f93c4bc7bb2fbbaaa8c3f809e858ce1f12a0f2 Component: engine --- .../pkg/parsers/kernel/kernel_windows.go | 35 +++++-------------- .../operatingsystem_windows.go | 2 +- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/components/engine/pkg/parsers/kernel/kernel_windows.go b/components/engine/pkg/parsers/kernel/kernel_windows.go index d54f032cb0..b7b15a1fd2 100644 --- a/components/engine/pkg/parsers/kernel/kernel_windows.go +++ b/components/engine/pkg/parsers/kernel/kernel_windows.go @@ -2,9 +2,9 @@ package kernel // import "github.com/docker/docker/pkg/parsers/kernel" import ( "fmt" - "unsafe" "golang.org/x/sys/windows" + "golang.org/x/sys/windows/registry" ) // VersionInfo holds information about the kernel. @@ -22,41 +22,24 @@ func (k *VersionInfo) String() string { // GetKernelVersion gets the current kernel version. func GetKernelVersion() (*VersionInfo, error) { - var ( - h windows.Handle - dwVersion uint32 - err error - ) - KVI := &VersionInfo{"Unknown", 0, 0, 0} - if err = windows.RegOpenKeyEx(windows.HKEY_LOCAL_MACHINE, - windows.StringToUTF16Ptr(`SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\`), - 0, - windows.KEY_READ, - &h); err != nil { + k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) + if err != nil { return KVI, err } - defer windows.RegCloseKey(h) + defer k.Close() - var buf [1 << 10]uint16 - var typ uint32 - n := uint32(len(buf) * 2) // api expects array of bytes, not uint16 - - if err = windows.RegQueryValueEx(h, - windows.StringToUTF16Ptr("BuildLabEx"), - nil, - &typ, - (*byte)(unsafe.Pointer(&buf[0])), - &n); err != nil { + blex, _, err := k.GetStringValue("BuildLabEx") + if err != nil { return KVI, err } - - KVI.kvi = windows.UTF16ToString(buf[:]) + KVI.kvi = blex // Important - docker.exe MUST be manifested for this API to return // the correct information. - if dwVersion, err = windows.GetVersion(); err != nil { + dwVersion, err := windows.GetVersion() + if err != nil { return KVI, err } diff --git a/components/engine/pkg/parsers/operatingsystem/operatingsystem_windows.go b/components/engine/pkg/parsers/operatingsystem/operatingsystem_windows.go index aec4cce72d..372de51469 100644 --- a/components/engine/pkg/parsers/operatingsystem/operatingsystem_windows.go +++ b/components/engine/pkg/parsers/operatingsystem/operatingsystem_windows.go @@ -12,7 +12,7 @@ func GetOperatingSystem() (string, error) { // Default return value ret := "Unknown Operating System" - k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\WIndows NT\CurrentVersion`, registry.QUERY_VALUE) + k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) if err != nil { return ret, err }